Java 连接到internet总是返回false
广播接收器工作正常,但每当我打开wifi,并且有正确的互联网连接时,它总是返回false或不做任何事情。我该如何解决这个问题。。。。。下面是我的代码!谢谢你的帮助Java 连接到internet总是返回false,java,android,Java,Android,广播接收器工作正常,但每当我打开wifi,并且有正确的互联网连接时,它总是返回false或不做任何事情。我该如何解决这个问题。。。。。下面是我的代码!谢谢你的帮助 public class NetworkChangeReceiver extends BroadcastReceiver { IvrsPushService isp; DatapushService dsp; boolean status; HttpURLConnection urlc; @O
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了解线程-与在设备/仿真器上运行相比,它在调试中的工作方式总是不同的。这就是线程工作的本质。将用一些可能对您有帮助的内容更新我的答案。好的,谢谢您的时间:)