我开发了一个使用Web服务获取数据的Android应用程序。这意味着它需要互联网连接。我的问题是,在网络服务呼叫期间或在网络服务呼叫之前互联网不可用时,它应该发出一些警报。
我已经实现了一个代码:
public static boolean isOnline(Context context) {
try {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (cm.getActiveNetworkInfo().isConnectedOrConnecting()) {
URL url = new URL("https://widget.istockanalyst.com/WebServiceIStock.asmx");
HttpURLConnection urlc = (HttpURLConnection) url
.openConnection();
urlc.setRequestProperty("User-Agent", "My Android Demo");
urlc.setRequestProperty("Connection", "close");
urlc.setConnectTimeout(1000); // mTimeout is in seconds
urlc.connect();
if (urlc.getResponseCode() == 200)
{
System.out.println("*********True****************");
return true;
}
else
{
System.out.println("*********False****************");
return false;
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
然后在我的启动画面上调用此方法。并在模拟器上它正在响应。但是当我在禁用wifi后执行设备测试时,它显示错误并且应用程序崩溃。
请帮助我。
答案 0 :(得分:0)
您收到错误是因为
cm.getActiveNetworkInfo()
返回null,因此当您调用
时.isConnectedOrConnecting())
抛出java.lang.NullPointerException。更好的方法是测试getActiveNetworkInfo()是否返回null
public boolean isOnline(Context context) {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isConnectedOrConnecting())
return true;
return false;
}
希望这有帮助。