【问题标题】:java.lang.RuntimeException: Unable to start receiver *.mycustomReceiver java.lang.NullPointerExceptionjava.lang.RuntimeException:无法启动接收器 *.mycustomReceiver java.lang.NullPointerException
【发布时间】:2014-04-29 21:16:26
【问题描述】:

我收到 Java 空指针异常无法启动接收器错误。我正在制作一个从 parse.com 接收推送的应用程序,我收到了 Android 4.0.3 - 4.0.4 的错误,以及当我重新启动某些设备时..

我的 LogCat 是

**java.lang.RuntimeException: Unable to start receiver com.omega.omegaplus.main.MyCustomReceiver: java.lang.NullPointerException
at android.app.ActivityThread.handleReceiver(ActivityThread.java:2419)
at android.app.ActivityThread.access$1500(ActivityThread.java:139)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1322)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:156)
at android.app.ActivityThread.main(ActivityThread.java:4987)
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:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at org.json.JSONTokener.nextCleanInternal(JSONTokener.java:116)
at org.json.JSONTokener.nextValue(JSONTokener.java:94)
at org.json.JSONObject.<init>(JSONObject.java:154)
at org.json.JSONObject.<init>(JSONObject.java:171)
at com.omega.omegaplus.main.MyCustomReceiver.onReceive(MyCustomReceiver.java:30)
at android.app.ActivityThread.handleReceiver(ActivityThread.java:2408)
... 10 more**

我的广播接收器是

    @Override
    public void onReceive(Context context, Intent intent) {

        Bundle extras = intent.getExtras();        
        String message = extras != null ? extras.getString("com.parse.Data")
                : "";

        Log.e("message ", " " + message);        
        JSONObject jObject;
        try {
            jObject = new JSONObject(message);
            //objectId = jObject.getString("id");
            time = jObject.getString("time");
            msg = jObject.getString("title");
            title = jObject.getString("msg");
                GCMMessage gcmMessage = new GCMMessage();

            //gcmMessage.setMsg_id(1);
            gcmMessage.setMsg_body(msg);
            gcmMessage.setMsg_title(title);
            gcmMessage.setType(0);
            gcmMessage.setDateTime(time);

                DatabaseUtil.insertMessage(context, gcmMessage);

        }        
        catch (JSONException e) {
            e.printStackTrace();
        }
}

当我重新启动手机时,它也会显示相同的错误...,否则它工作正常。

【问题讨论】:

  • 第 30 行在哪里?这就是你的空指针异常发生的地方
  • 我无法找出您收到错误的代码。哪段代码指向 com.omega.omegaplus.main.MyCustomReceiver.onReceive(MyCustomReceiver.java:30) 的这个位置
  • 消息的价值是什么?它不包含在您的 logcat 输出中
  • 可能是消息取值",因此jObject 为空,因此尝试从jObject 获取任何内容都不会提供任何内容
  • 但此错误仅适用于 HTC Desire V (primods)

标签: java android


【解决方案1】:

我猜message 的值是""NULL

    JSONObject jObject;
    try {
        if (message != null && !message.equals("") {
          jObject = new JSONObject(message);
          //objectId = jObject.getString("id");
          time = jObject.getString("time");
          msg = jObject.getString("title");
          title = jObject.getString("msg");
          GCMMessage gcmMessage = new GCMMessage();

          //gcmMessage.setMsg_id(1);
          gcmMessage.setMsg_body(msg);
          gcmMessage.setMsg_title(title);
          gcmMessage.setType(0);
          gcmMessage.setDateTime(time);

          DatabaseUtil.insertMessage(context, gcmMessage);
        }

      }        
      catch (JSONException e) {
        e.printStackTrace();
      }

【讨论】:

  • 这并没有提供问题的答案。要批评或要求作者澄清,请在其帖子下方发表评论。
  • RiggsFolly - 不同意这一点。鉴于这些信息,我强烈怀疑我的回答是正确的。无论如何,我用一些代码更新了答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-10
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多