0

When i test the following Java SMS Api code in Intellij IDE i get SMS response but when i use it in an android app am working on. The app crashes and i get logcat error I have included below. I have been working on the error for a number of days but no success. I have included the following codes.

  1. Smsgateway Class
  2. Main Class
  3. Logcat error am getting at run time

Please assist.

SmsGateway Class

package com.example.smsApi;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.io.UnsupportedEncodingException;

public class SmsGateway {

private String mBaseUrl;
private int mPartnerId;
private String mApiKey;
private String mShortCode;
private HttpURLConnection connection;

public SmsGateway(String baseUrl, int partnerId, String apiKey, String shortCode) {
    this.mBaseUrl = baseUrl;
    this.mPartnerId = partnerId;
    this.mApiKey = apiKey;
    this.mShortCode = shortCode;
}


private String getFinalURL(String mobile, String message) {

    String encodedMessage = null;
    try {
        encodedMessage = URLEncoder.encode(message, StandardCharsets.UTF_8.toString());
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
    String encodedMobiles = null;
    try {
        encodedMobiles = URLEncoder.encode(mobile, StandardCharsets.UTF_8.toString());
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }

    return mBaseUrl + "?apikey=" + mApiKey + "&partnerID=" + mPartnerId + "&shortcode=" +
            mShortCode + "&mobile=" + encodedMobiles + "&message=" + encodedMessage;
}

public String sendSingleSms(String message, String mobile) throws IOException {

    String finalUrl = getFinalURL(mobile, message);

    return makeHttpGetRequest(finalUrl);
}

public String sendBulkSms(String message, String[] mobiles) throws IOException {

    String numbers = Arrays.toString(mobiles)
            .replace("[", "")
            .replace("]", "")
            .replace(" ", "");

    String finalUrl = getFinalURL(numbers, message);

    return makeHttpGetRequest(finalUrl);
}


private String makeHttpGetRequest(String urlString) throws IOException {
    URL url = makeURL(urlString);

    if (connection == null) {

        connection = (HttpURLConnection) url.openConnection();

        connection.setRequestMethod("GET");
        connection.setReadTimeout(15000);
    }

    StringBuilder content;

    BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));

    String line;

    content = new StringBuilder();

    while ((line = in.readLine()) != null) {
        content.append(line);
        content.append(System.lineSeparator());
    }

    return content.toString();
}


private URL makeURL(String urlString) throws MalformedURLException {
    return new URL(urlString);
}

}

Main Class

String baseUrl = "";

int partnerId = xxx; 
String apiKey = "xxx"; 
String shortCode = "xxx";

SmsGateway gateway = new SmsGateway(baseUrl, partnerId, apiKey, shortCode);


    String[] strings = {"xxx"};


    try {
        String res = gateway.sendBulkSms("Hello Bulk from Java API ", strings);
        System.out.println(res);
    } catch (IOException e) {
        e.printStackTrace();
    }

Logcat

2021-03-26 13:12:23.103 15301-15301/? E/libc: Access denied finding property "persist.vendor.sys.activitylog"

2021-03-26 13:12:25.683 15301-15301/com.example.smsApi E/libc: Access denied finding property "persist.vendor.log.tel_dbg"
2021-03-26 13:12:25.721 15301-15301/com.example.smsApi E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.slickkwear, PID: 15301
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.smsApi/com.example.smsApi.MainActivity}: android.os.NetworkOnMainThreadException
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2956)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3091)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1843)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6758)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:497)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:912)
     Caused by: android.os.NetworkOnMainThreadException
        at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1513)
        at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:117)
        at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:105)
        at java.net.InetAddress.getAllByName(InetAddress.java:1154)
        at com.android.okhttp.Dns$1.lookup(Dns.java:39)
        at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:175)
        at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:141)
        at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:83)
        at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:174)
        at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:126)
        at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:95)
        at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:299)
        at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:237)
        at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:472)
        at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:418)
        at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:244)
        at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getInputStream(DelegatingHttpsURLConnection.java:210)
        at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:26)
        at com.example.slickkwear.SmsGateway.makeHttpGetRequest(SmsGateway.java:83)
        at com.example.slickkwear.SmsGateway.sendBulkSms(SmsGateway.java:66)
        at com.example.slickkwear.MainActivity.onCreate(MainActivity.java:70)
        at android.app.Activity.performCreate(Activity.java:7136)
        at android.app.Activity.performCreate(Activity.java:7127)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2933)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3091) 
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1843) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:193) 
        at android.app.ActivityThread.main(ActivityThread.java:6758) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:497) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:912) 

0 Answers0