我正在尝试识别来自用户的连接是离线还是在线。
我建了一个班来检查它:
public class wifi {
public static Context context;
public static ConnectivityManager connec;
public static final boolean isInternetOn(){
// get Connectivity Manager object to check connection
connec = (ConnectivityManager)context.getSystemService(context.CONNECTIVITY_SERVICE);
// Check for network connections
if ( connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.CONNECTED ||
connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.CONNECTING ||
connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.CONNECTING ||
connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.CONNECTED ) {
// if connected with internet
Toast.makeText(context, " Connected ", Toast.LENGTH_LONG).show();
return true;
} else if (
connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.DISCONNECTED ||
connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.DISCONNECTED ) {
Toast.makeText(context, " Not Connected ", Toast.LENGTH_LONG).show();
return false;
}
return false;
}
}
在我需要的时候打电话,
我的主要活动:
public void login(View view) {
if(wifi.isInternetOn() == true){
gpsTracker = new GPSTracker(this);
if (gpsTracker.getIsGPSTrackingEnabled())
{
Latitude = String.valueOf(gpsTracker.latitude);
Longitude = String.valueOf(gpsTracker.longitude);
Session.slatitude = Latitude;
Session.slongitude = Longitude;
String getemail = email.getText().toString();
String getpassword = password.getText().toString();
new SigninActivity(this, status).execute(getemail, getpassword,Latitude,Longitude);
}
}
}
但是当我运行我的代码时,我收到了这些错误:
07-02 15:34:24.052: E/AndroidRuntime(10026): FATAL EXCEPTION: main 07-02 15:34:24.052: E/AndroidRuntime(10026):
java.lang.ExceptionInInitializerError 07-02 15:34:24.052: E/AndroidRuntime(10026):
at com.tapp.myapp.MainActivity.login(MainActivity.java:168) 07-02 15:34:24.052:
E/AndroidRuntime(10026): at com.tapp.myapp.MainActivity$1$1.onCompleted(MainActivity.java:116) 07-02 15:34:24.052:
E/AndroidRuntime(10026): Caused by: java.lang.NullPointerException 07-02 15:34:24.052:
E/AndroidRuntime(10026): at com.tapp.myapp.wifi.<clinit>(wifi.java:9) 07-02 15:34:24.052: E/AndroidRuntime(10026): ... 13 more
我做错了什么?
答案 0 :(得分:0)
检查您的上下文值。 Context
为null
。
答案 1 :(得分:0)
ConnectivityManager#getNetworkInfo(int type)
将返回<div class="user-logged-in">
<div class="content">
<div class="user-name" id="firstName">(Name Here) <span class="text-muted f9">admin</span></div>
<div class="user-email" id="userEmail">(Email Here)</div>
<div class="user-actions">
<a class="m-r-5" href="">settings</a> <a href="/first/login">logout</a>
</div>
</div>
</div>
。
我不确定为什么要将null
和0
的常量值传递给此方法,但我猜这些参数并不代表您认为它们的含义
您应该使用ConnectivityManager
的TYPE_常量,例如TYPE_MOBILE
。
您正在使用的常量(0和1)分别指代1
和TYPE_MOBILE
,但如果您在诸如模拟器之类的设备上运行此常量,则其中一个或两个可能很容易不支持的。
由于设备可能不支持您正在检查的一种或多种类型,因此您还应该对TYPE_WIFI
的返回值进行空值检查。
请注意,如果您关心的是用户是否已连接到互联网,那么您可能无需检查显式类型。只需拨打getActivityNetworkInfo()
,即可获得用户的有效网络连接。检查它是否为空(它们可能没有活动连接),然后检查其状态以查看它是否已连接。