Android检查某些平板电脑的网络连接崩溃
我知道这里已经有人问过这个问题,但我不明白为什么我的代码不能按预期工作。我需要在我的应用程序启动时检查数据连接,但它在一些平板电脑(如Nexus7)上崩溃,但不是在所有平板电脑上 我的代码:Android检查某些平板电脑的网络连接崩溃,android,crash,tablet,connectivity,Android,Crash,Tablet,Connectivity,我知道这里已经有人问过这个问题,但我不明白为什么我的代码不能按预期工作。我需要在我的应用程序启动时检查数据连接,但它在一些平板电脑(如Nexus7)上崩溃,但不是在所有平板电脑上 我的代码: public static boolean getNetworkState(Context pContext) { ConnectivityManager connect = (ConnectivityManager)pContext.getSystemService(Context.CONNEC
public static boolean getNetworkState(Context pContext)
{
ConnectivityManager connect = (ConnectivityManager)pContext.getSystemService(Context.CONNECTIVITY_SERVICE);
if(connect != null)
{
if (connect.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnectedOrConnecting())
{
return true;
}
else
{
return false;
}
}
else
return false;
}
public static boolean getWifiState(Context context)
{
ConnectivityManager connect = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
if ( connect.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnectedOrConnecting())
{
return true;
}
else
{
return false;
}
}
连接检查:
if(Commons.getNetworkState(this) || Commons.getWifiState(this))
{
loadData();
}
else
{
Commons.getConnectivityErrorMessage(this);
}
通常,如果平板电脑不支持网络连接,“getNetworkState”中的“connectivity”对象应为空,但情况似乎并非如此,因为它在联机时崩溃
if (connect.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnectedOrConnecting())
这里怎么了?
权限已写入
编辑:不幸的是,我没有平板电脑来测试这个问题。我只是在开发者控制台上有用户报告。具有Nexus 7的用户报告了以下报告:
java.lang.RuntimeException: Unable to resume activity {com.meteociel.fr/com.meteociel.fr.activities.MeteocielActivity}: java.lang.RuntimeException: Unable to resume activity {com.meteociel.fr/com.meteociel.fr.activities.HomeActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2575)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2603)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2089)
at android.app.ActivityThread.access$600(ActivityThread.java:130)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4745)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.RuntimeException: Unable to resume activity {com.meteociel.fr/com.meteociel.fr.activities.HomeActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2575)
at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:178)
at android.app.LocalActivityManager.dispatchResume(LocalActivityManager.java:523)
at android.app.ActivityGroup.onResume(ActivityGroup.java:61)
at com.meteociel.fr.activities.MeteocielActivity.onResume(MeteocielActivity.java:69)
at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1184)
at android.app.Activity.performResume(Activity.java:5082)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2565)
... 12 more
Caused by: java.lang.NullPointerException
at com.meteociel.fr.classes.Commons.getNetworkState(Commons.java:36)
at com.meteociel.fr.activities.HomeActivity.onResume(HomeActivity.java:98)
at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1184)
at android.app.Activity.performResume(Activity.java:5082)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2565)
... 19 more
编辑2:我使用的所有权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
此代码现在起作用:
public static boolean getNetworkState(Context pContext)
{
ConnectivityManager connect = null;
connect = (ConnectivityManager)pContext.getSystemService(pContext.CONNECTIVITY_SERVICE);
if(connect != null)
{
NetworkInfo result = connect.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if (result != null && result.isConnectedOrConnecting())
{
return true;
}
else
{
return false;
}
}
else
return false;
}
此代码现在起作用:
public static boolean getNetworkState(Context pContext)
{
ConnectivityManager connect = null;
connect = (ConnectivityManager)pContext.getSystemService(pContext.CONNECTIVITY_SERVICE);
if(connect != null)
{
NetworkInfo result = connect.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if (result != null && result.isConnectedOrConnecting())
{
return true;
}
else
{
return false;
}
}
else
return false;
}
如果wifi或移动数据连接关闭,此功能将返回false。如果启用,则返回true
boolean IsThereNetkork(){
boolean flag = false,mobile=false,wifi=false;
ConnectivityManager manager=(ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activenetwork=manager.getActiveNetworkInfo();
if(activenetwork!=null){
mobile=activenetwork.getType()==ConnectivityManager.TYPE_MOBILE;
wifi=activenetwork.getType()==ConnectivityManager.TYPE_WIFI;
if(activenetwork.isConnected()||activenetwork.isConnectedOrConnecting()){
if(wifi==true||mobile==true){
flag=true;
}
else if(wifi==false||mobile==false){
flag=false;
}
}
}
else {
flag=false;
}
return flag;
}
如果wifi或移动数据连接关闭,此功能将返回false。如果启用,则返回true
boolean IsThereNetkork(){
boolean flag = false,mobile=false,wifi=false;
ConnectivityManager manager=(ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activenetwork=manager.getActiveNetworkInfo();
if(activenetwork!=null){
mobile=activenetwork.getType()==ConnectivityManager.TYPE_MOBILE;
wifi=activenetwork.getType()==ConnectivityManager.TYPE_WIFI;
if(activenetwork.isConnected()||activenetwork.isConnectedOrConnecting()){
if(wifi==true||mobile==true){
flag=true;
}
else if(wifi==false||mobile==false){
flag=false;
}
}
}
else {
flag=false;
}
return flag;
}
Add将添加额外的检查,以查看
connect.getNetworkInfo(…)
的结果是否为null
。这似乎是崩溃的根源,坦率地说,如果给定的网络类型没有任何可用信息,那么将null
设置是有意义的。好的,我会尝试一下,但我不能给你结果,因为我没有测试人员(我正在寻找他们)。我将尝试:ConnectivityManager connect=null;connect=(ConnectivityManager)pContext.getSystemService(Context.CONNECTIVITY\u服务);如果(connect!=null){NetworkInfo result=connect.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);如果(result!=null&&result.isConnectedOrConnecting())
看看这里,这是我使用的代码:。(我不是这个网页的作者)好的,一个用户为我测试了它,现在它工作了!Thx很多:)Add将添加一个额外的检查,以查看connect.getNetworkInfo(…)的结果是否正确
不是null
。这似乎是崩溃的根源,坦率地说,如果给定的网络类型没有任何可用信息,那么null
是有意义的。好的,我会尝试一下,但我不能给你结果,因为我没有测试人员(我正在寻找他们)。我将尝试:ConnectivityManager connect=null;connect=(ConnectivityManager)pContext.getSystemService(Context.CONNECTIVITY\u SERVICE);if(connect!=null){NetworkInfo result=connect.getNetworkInfo(ConnectivityManager.TYPE\u MOBILE);if(result!=null&&result.isConnectedOrConnecting())
看看这里,这是我使用的代码:。(我不是这个网页的作者)好的,一个用户为我测试了它,现在它工作了!Thx很多:)绝对可怕;我在各种设备上都有一个应用程序崩溃,我不知道原因是什么。这个线程帮助很大;谢谢。平板电脑就不能获取移动数据吗?绝对可怕;我在各种设备上都有一个应用程序崩溃,我不知道原因是什么。这个线程帮了大忙;谢谢。平板电脑就不能获取移动数据吗?