如何检查Android中的互联网?

van*_*loc 2 java android

我创建了一个类来检查可用于将字符串上传到服务器的Internet.

我的应用程序在日志cat中没有显示任何错误或警告.所以,我不能发布任何日志.

但是当我连接或不连接到互联网时,它总是显示消息:You do not connect to the internet.在else子句中.

当我调试isInternetAvailable方法时,它转到第一行:

InetAddress ipAddr = InetAddress.getByName("google.com");

之后,它抛出异常,如:

cause = {NetworkOnMainThreadException} "android.os.NetworkOnMainThreadException"

并返回false.

下面的代码显示检查互联网,所有代码在一个类extends BroadcastReceiver:

public boolean isInternetAvailable() {
    try {
        InetAddress ipAddr = InetAddress.getByName("google.com");
        if (ipAddr.equals("")) {
            return false;
        } else {
            return true;
        }
    } catch (Exception e) {
        return false;
    }
}

@Override
public void onReceive(final Context context, final Intent intent) {
    String textToServer = "text example";
    if(isInternetAvailable()){
        sendToServer(context, textToServer.toString());
    } else {
        Toast.makeText(context, "You not connect to internet.", Toast.LENGTH_LONG).show();
    }
}

public void sendToServer(final Context context, final String text){
    contact = new AddContactActivity();
    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                String textparam = "text1=" + URLEncoder.encode(text, "UTF-8");
                URL scripturl = new URL(scripturlstring);
                HttpURLConnection connection = (HttpURLConnection) scripturl.openConnection();
                connection.setDoOutput(true);
                connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
                connection.setFixedLengthStreamingMode(textparam.getBytes().length);
                OutputStreamWriter contentWriter = new OutputStreamWriter(connection.getOutputStream());
                contentWriter.write(textparam);
                contentWriter.flush();
                contentWriter.close();

                InputStream answerInputStream = connection.getInputStream();
                final String answer = getTextFromInputStream(answerInputStream);

                if(answer!="") {
                    String[] contactInfo = answer.split(":::::");
                    if(!contactExists(context, contactInfo[1])) {
                        contact.insertContact(context, contactInfo[0], contactInfo[1], contactInfo[2], contactInfo[3], contactInfo[4]);
                    } else {
                        return;
                    }
                }
                answerInputStream.close();
                connection.disconnect();


            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }).start();

}
Run Code Online (Sandbox Code Playgroud)

UME*_*492 6

下面要检查的代码连接到互联网

 public static boolean isConnectingToInternet(Context context) {

    ConnectivityManager cm =
            (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();

    return activeNetwork != null &&
            activeNetwork.isConnectedOrConnecting();
}
Run Code Online (Sandbox Code Playgroud)

除了上面的代码之外,还要将它添加到清单中:( 来自下面的评论)

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
Run Code Online (Sandbox Code Playgroud)