Java 连接到internet总是返回false

Java 连接到internet总是返回false,java,android,Java,Android,广播接收器工作正常,但每当我打开wifi,并且有正确的互联网连接时,它总是返回false或不做任何事情。我该如何解决这个问题。。。。。下面是我的代码!谢谢你的帮助 public class NetworkChangeReceiver extends BroadcastReceiver { IvrsPushService isp; DatapushService dsp; boolean status; HttpURLConnection urlc; @O

广播接收器工作正常,但每当我打开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

    }
}

}

您将
状态设置为
false

boolean status =false;

您正试图在另一个线程中更改它

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

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

在以这种方式使用线程之前,您需要了解一些java线程是如何工作的


这段代码有很多错误。也许以下几点会让你走上正确的道路

  • 处理线程的方式看起来像是期望线程在等待响应时阻塞。但是,该线程将同时运行到主线程代码
  • 话虽如此,在Android中使用基本
    线程通常不是正确的选择。考虑<代码> AycCastase或<代码>汉德勒< /Cord>类,
  • 在Android中,
    BroadcastReceiver
    代码必须非常短,并且执行速度很快。一个好的经验法则是,除了启动
    服务
    活动
    之外,在接收器中什么都不做。将所有逻辑放在该服务/活动类中

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

是否已授予权限?欢迎使用StackOverflow。“为我调试我的代码”不是问题。@BrianRoach我不是要求调试我的代码……调试时我的代码工作得很好……在我的手机上安装应用程序时它不工作!我想我可以在这里得到帮助,但人们正忙着寻找消极方面:(@Anu是的,我添加了权限,当我调试应用程序时,它工作得非常好,但当我在我的手机上安装它时,它却没有:(不幸的是,你问问题的方式非常唐突。本网站也有一项政策,要求用户展示关于手头问题的基本知识,这似乎是问题中缺少的。我已更新了我的答案,但如果你更新你的问题,使其与本网站上的其他问题更为相似,你可能会得到相反的反对票。嗯,比感谢您指出这一点,但这似乎不是问题所在…因为,当我调试它时,它工作正常…它进入循环中,但当我在我的手机上安装它并检查时,它无法进入循环中!在emulator上尝试过同样的方法,如果我以配置方式运行它不工作。但是当我调试它时,它工作正常!@user3458008这是您不需要的事情之一o了解线程-与在设备/仿真器上运行相比,它在调试中的工作方式总是不同的。这就是线程工作的本质。将用一些可能对您有帮助的内容更新我的答案。好的,谢谢您的时间:)