连接到互联网始终返回false

时间:2014-04-25 10:09:55

标签: java android

广播接收器正在正常工作,但每当我打开wifi并且有正确的互联网连接时,它总是返回false或者什么都不做。我该如何解决这个问题......以下是我的代码!谢谢你的帮助

public class NetworkChangeReceiver extends BroadcastReceiver {
    IvrsPushService isp;
    DatapushService dsp;
    boolean status;
    HttpURLConnection urlc;

    @Override
    public void onReceive(final Context context, final Intent intent)
    {
        new Thread() {
            @Override
            public void run() {
                status =hasActiveInternetConnection(context);
            }
            }.start();

            String str = Boolean.toString(status);

        if (status==true)
        {


            Toast.makeText(context, "wifi enabled and working", Toast.LENGTH_SHORT).show();

                            ivrssendonnetworkconnection(context);
                            datasendonnetworkconnection(context);






            //ivrssendonnetworkconnection(context);
            //datasendonnetworkconnection(context);
        }
        else
        {
            Toast.makeText(context, "wifi is enabled but not working", Toast.LENGTH_SHORT).show();
        }
        String str1 = Boolean.toString(status);
        Toast.makeText(context, str1, Toast.LENGTH_SHORT).show();
    }




    public void ivrssendonnetworkconnection(final Context context) {

    }

    public void datasendonnetworkconnection(final Context context) {

    }




public void retrieveValuesFromListMethod1(List AssetId,Context context)
{

    Iterator itr = AssetId.iterator();
    while(itr.hasNext())
    {


    }
}
public static boolean isNetworkAvailable(Context context) {
     ConnectivityManager cm = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo networkInfo = cm.getActiveNetworkInfo();
    // if no network is available networkInfo will be null
    // otherwise check if we are connected
    if (networkInfo != null && networkInfo.isConnected()) {
        return true;
    }
    return false;
} 
public static boolean hasActiveInternetConnection(Context context) {
    String LOG_TAG = "hello";
    if (isNetworkAvailable(context)) {
        try {
            HttpURLConnection urlc = (HttpURLConnection) (new URL("http://www.google.com").openConnection());
            urlc.setRequestProperty("User-Agent", "Test");
            urlc.setRequestProperty("Connection", "close");
            urlc.setConnectTimeout(1500); 
            urlc.connect();
            return (urlc.getResponseCode() == 200);
        } catch (IOException e) {
            Log.e(LOG_TAG, "Error checking internet connection", e);
        }
    } else {
        Log.d(LOG_TAG, "No network available!");
    }
    return false;
}

public void retrieveValuesFromListMethod2(List Asset,Context context)
{

    Iterator itr = Asset.iterator();
    while(itr.hasNext())
    {
    //do something

    }
}

}

1 个答案:

答案 0 :(得分:1)

您将status设置为false

boolean status =false;

您正尝试在另一个帖子中更改它。

    new Thread() {
        @Override
        public void run() {
            status =hasActiveInternetConnection(context);
        }
    }.start();

您检查时可能不会反映出这种变化。

在以这种方式使用线程之前,您需要了解一下java线程的工作原理。


这段代码有点不对劲。也许以下几点会让你走上正确的道路。

  • 处理线程的方式看起来像是在期望线程在等待响应时阻塞。但是,该线程将同时运行到您的主线程代码。
  • 话虽如此,在Android中使用基本的Thread通常不是正确的选择。请改为考虑AsyncTaskHandler类。
  • 在Android中,BroadcastReceiver代码必须非常短,并快速执行。一个好的经验法则是在接收器中不执行任何操作,只需启动ServiceActivity。将所有逻辑放入该服务/活动类中。

考虑到这一点,您可以从接收器启动服务。在您的服务中,您可以使用AsyncTask来检查您的连接。这将是一种更好的设计方法。