2012-09-11 131 views
1

我知道这个话题已经在这里问过,但我不明白为什么作为expectd我的代码不能正常工作。我需要在启动我的应用程序时检查数据连接,但它在某些平板电脑上(如Nexus 7)崩溃,但不是全部。检查网络连接崩溃

我的代码:

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”中的“连接”对象应为空,但它似乎这是不是这样的,因为它坠毁,机上线

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" /> 
+1

post logcat请 –

+0

哪个权限? – Shiva

+1

添加会增加额外的检查,看是否'connect.getNetworkInfo(...)的结果'不'null'。这似乎是崩溃,坦率的起源,这将是有意义的是'null'如果没有提供所有给定的网络类型的任何信息。 –

回答

5

此代码的工作现在:

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; 
    } 
+0

绝对可怕;我在各种设备上遇到了应用程序崩溃,我不知道原因是什么。这个线程非常有帮助;谢谢。平板电脑能否获取移动数据? – user1810737

0

如果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; 
}