【问题标题】:getSystemService(Context.CONNECTIVITY_SERVICE) throwing exception on mobile datagetSystemService(Context.CONNECTIVITY_SERVICE) 在移动数据上抛出异常
【发布时间】:2013-12-16 15:30:36
【问题描述】:

我有一个实用程序方法可以检查 wifi 连接并返回 SSID。当手机连接 Wifi 时它工作正常,但当我连接移动数据连接时它会失败。即使在实用程序中使用 try catch 块也不会捕获异常。 getSystemService 行没有执行任何操作。使用调试日志进行验证。确切的代码是:

public static String getCurrentSsid(Context context) {

    String ssid = null;
    NetworkInfo networkInfo;
    ConnectivityManager connManager;

    try {
        connManager = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);

        networkInfo = connManager
                .getNetworkInfo(ConnectivityManager.TYPE_WIFI);
    } catch (Exception e) {
        return null;
    }

    if (networkInfo.isConnected()) {
        final WifiManager wifiManager = (WifiManager) context
                .getSystemService(Context.WIFI_SERVICE);
        final WifiInfo connectionInfo = wifiManager.getConnectionInfo();
        if (connectionInfo != null) {
            ssid = connectionInfo.getSSID();
        }
    }
    return ssid;
}

logcat 仅显示我正在调用此实用程序的异步任务的错误。知道我哪里出错了吗?

11-30 21:42:38.723: W/dalvikvm(21207): threadid=14: thread exiting with uncaught exception (group=0x4165e2a0)
11-30 21:42:38.733: E/AndroidRuntime(21207): FATAL EXCEPTION: AsyncTask #1
11-30 21:42:38.733: E/AndroidRuntime(21207): java.lang.RuntimeException: An error occured while executing doInBackground()
11-30 21:42:38.733: E/AndroidRuntime(21207):    at android.os.AsyncTask$3.done(AsyncTask.java:299)
11-30 21:42:38.733: E/AndroidRuntime(21207):    at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
11-30 21:42:38.733: E/AndroidRuntime(21207):    at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
11-30 21:42:38.733: E/AndroidRuntime(21207):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
11-30 21:42:38.733: E/AndroidRuntime(21207):    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
11-30 21:42:38.733: E/AndroidRuntime(21207):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
11-30 21:42:38.733: E/AndroidRuntime(21207):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
11-30 21:42:38.733: E/AndroidRuntime(21207):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
11-30 21:42:38.733: E/AndroidRuntime(21207):    at java.lang.Thread.run(Thread.java:856)
11-30 21:42:38.733: E/AndroidRuntime(21207): Caused by: java.lang.NullPointerException
11-30 21:42:38.733: E/AndroidRuntime(21207):    at com.example.slapp.PhoneContactsListFragment$setInviteVisibilityAsync.doInBackground(PhoneContactsListFragment.java:1069)
11-30 21:42:38.733: E/AndroidRuntime(21207):    at com.example.slapp.PhoneContactsListFragment$setInviteVisibilityAsync.doInBackground(PhoneContactsListFragment.java:1)
11-30 21:42:38.733: E/AndroidRuntime(21207):    at android.os.AsyncTask$2.call(AsyncTask.java:287)
11-30 21:42:38.733: E/AndroidRuntime(21207):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
11-30 21:42:38.733: E/AndroidRuntime(21207):    ... 5 more

【问题讨论】:

  • @Hamad 感谢您格式化 logcat。
  • 不客气@faizal

标签: android exception error-handling


【解决方案1】:

发布的代码没有任何问题。

问题在于,如果手机处于移动数据模式,该函数会将空值返回给我的异步任务。而且我在处理返回值时没有检查空条件。所以我所要做的就是在实际检查之前添加一个空检查,如下所示:

String ssid = getCurrentSsid(Context);
if (ssid != null && ssid.equals("xyz")) { //do something}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-24
    • 1970-01-01
    • 2011-05-25
    • 2015-08-03
    • 1970-01-01
    相关资源
    最近更新 更多