NetworkState icon indicating copy to clipboard operation
NetworkState copied to clipboard

错误日志收集中发现一个空指针

Open HelloJokerWord opened this issue 6 years ago • 6 comments

java.lang.RuntimeException: Error receiving broadcast Intent { act=android.net.conn.CONNECTIVITY_CHANGE flg=0x4000010 (has extras) } in com.carlt.networklibs.NetworkStateReceiver@6b75cbe at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$-android_app_LoadedApk$ReceiverDispatcher$Args_52651(LoadedApk.java:1329) at android.app.-$Lambda$aS31cHIhRx41653CMnd4gZqshIQ.$m$7(Unknown Source:4) at android.app.-$Lambda$aS31cHIhRx41653CMnd4gZqshIQ.run(Unknown Source:39) at android.os.Handler.handleCallback(Handler.java:794) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:176) at android.app.ActivityThread.main(ActivityThread.java:6651) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:824) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.String.toLowerCase()' on a null object reference at com.carlt.networklibs.utils.NetworkUtils.getNetType(NetworkUtils.java:57) at com.carlt.networklibs.NetworkStateReceiver.onReceive(NetworkStateReceiver.java:46) at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$-android_app_LoadedApk$ReceiverDispatcher$Args_52651(LoadedApk.java:1319) ... 9 more java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.String.toLowerCase()' on a null object reference at com.carlt.networklibs.utils.NetworkUtils.getNetType(NetworkUtils.java:57) at com.carlt.networklibs.NetworkStateReceiver.onReceive(NetworkStateReceiver.java:46) at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$-android_app_LoadedApk$ReceiverDispatcher$Args_52651(LoadedApk.java:1319) at android.app.-$Lambda$aS31cHIhRx41653CMnd4gZqshIQ.$m$7(Unknown Source:4) at android.app.-$Lambda$aS31cHIhRx41653CMnd4gZqshIQ.run(Unknown Source:39) at android.os.Handler.handleCallback(Handler.java:794) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:176) at android.app.ActivityThread.main(ActivityThread.java:6651) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:824)

HelloJokerWord avatar Jul 03 '19 03:07 HelloJokerWord

if (type == ConnectivityManager.TYPE_MOBILE) { if (activeNetworkInfo.getExtraInfo().toLowerCase().equals("cmnet")) { return NetType.CMNET; } else { return NetType.CMWAP; } 应该是源码的这段代码,activeNetworkInfo.getExtraInfo()这个要判空一下。有些手机似乎会报空指针。目前发现的手机大部分来自小米。

HelloJokerWord avatar Jul 04 '19 07:07 HelloJokerWord

是的需要判空一下的,或者equlals写左面就没事了

MIkeeJY avatar Nov 21 '19 07:11 MIkeeJY

好的,下来我找个小米手机测试一下,然后修复一下

allenlzhang avatar Dec 04 '19 09:12 allenlzhang

@allenlzhang 这个我也遇到了 设备机型

华为 LYA AL10 系统版本

Android 9,level 28

ROM

HuaWei/EMOTION

CPU架构

arm64-v8a

/** * 获取网络类型 * * @return */

    public static NetType getNetType() {
        ConnectivityManager connmagr = (ConnectivityManager) NetworkManager.getInstance().getApplication().getSystemService(Context.CONNECTIVITY_SERVICE);
        if (connmagr == null) {
            return NetType.NONE;
        }
        NetworkInfo activeNetworkInfo = connmagr.getActiveNetworkInfo();
        if (activeNetworkInfo != null) {
            int type = activeNetworkInfo.getType();
            if (type == ConnectivityManager.TYPE_MOBILE) {
                if ("cmnet".equals(activeNetworkInfo.getExtraInfo().toLowerCase())) {
                    return NetType.CMNET;
                } else {
                    return NetType.CMWAP;
                }
            } else if (type == ConnectivityManager.TYPE_WIFI) {
                return NetType.WIFI;

            }
        }
        return NetType.NONE;
    }

java.lang.NullPointerException:Attempt to invoke virtual method 'java.lang.String java.lang.String.toLowerCase()' on a null object reference

MIkeeJY avatar Dec 06 '19 07:12 MIkeeJY

建议改成 判空形式

public static NetType getNetType() {
  ConnectivityManager connmagr = (ConnectivityManager) NetworkManager.getInstance().getApplication().getSystemService(Context.CONNECTIVITY_SERVICE);
  if (connmagr == null) {
      return NetType.NONE;
  }
  NetworkInfo activeNetworkInfo = connmagr.getActiveNetworkInfo();
  if (activeNetworkInfo != null) {
      int type = activeNetworkInfo.getType();
      if (type == ConnectivityManager.TYPE_MOBILE) {
          String extraInfo = activeNetworkInfo.getExtraInfo();
          if (extraInfo != null && !extraInfo.isEmpty()) {
              if (extraInfo.equalsIgnoreCase("cmnet")) {
                  return NetType.CMNET;
              } else {
                  return NetType.CMWAP;
              }
          }

      } else if (type == ConnectivityManager.TYPE_WIFI) {
          return NetType.WIFI;

      }
  }
  return NetType.NONE;
}

亲测线上不再复现。。。建议及时更新代码 @allenlzhang

MIkeeJY avatar Dec 06 '19 07:12 MIkeeJY

bug已经修复了,谢谢各位。

allenlzhang avatar Mar 28 '20 09:03 allenlzhang