首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OnReceive in BroacdcastReceiver返回意图与额外但不能提取

OnReceive in BroacdcastReceiver返回意图与额外但不能提取
EN

Stack Overflow用户
提问于 2014-10-18 23:31:56
回答 1查看 775关注 0票数 0

问题

我不知道为什么logcat给我一个NPE,因为它的意图不是空的,并且在onReceive()中有额外的内容,所以请帮助我找出并指导我一些事情。

注意事项

  1. 我在这个项目中有多个广播接收器。
  2. 我用唯一的ID注册它们。

Logcat (证明它有额外的)

代码语言:javascript
复制
10-19 06:10:32.587  31593-31593/com.bis.prototype.airdroid E/BroadcastReceiver_CalibrateMode﹕ Intent { flg=0x14 cmp=com.bis.prototype.airdroid/.BroadcastReceiver_CalibrateMode (has extras) }

BroadcastReceiver_CalibrateMode.class

代码语言:javascript
复制
public class BroadcastReceiver_CalibrateMode extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {


        Log.e("BroadcastReceiver_CalibrateMode", String.valueOf(intent));
        String slot = intent.getExtras().getString("NODE_SLOT");
        Log.e("BroadcastReceiver_CalibrateMode", slot); // NPE ON THIS LINE

        Intent calibrateIntent = new Intent(context, Service_MQTTPush.class);
        calibrateIntent.putExtra("CALIBRATE_MODE",true);
        calibrateIntent.putExtra("NODE_SLOT", slot);
        context.startService(calibrateIntent);
    }
}

LogCat

代码语言:javascript
复制
java.lang.RuntimeException: Unable to start receiver com.bis.prototype.airdroid.BroadcastReceiver_CalibrateMode: java.lang.NullPointerException: println needs a message
        at android.app.ActivityThread.handleReceiver(ActivityThread.java:2476)
        at android.app.ActivityThread.access$1700(ActivityThread.java:144)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1322)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:212)
        at android.app.ActivityThread.main(ActivityThread.java:5135)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:877)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)
        at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.NullPointerException: println needs a message
        at android.util.Log.println_native(Native Method)
        at android.util.Log.e(Log.java:232)
        at com.bis.prototype.airdroid.BroadcastReceiver_CalibrateMode.onReceive(BroadcastReceiver_CalibrateMode.java:17)
        at android.app.ActivityThread.handleReceiver(ActivityThread.java:2469)
            at android.app.ActivityThread.access$1700(ActivityThread.java:144)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1322)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:212)
            at android.app.ActivityThread.main(ActivityThread.java:5135)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:877)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)
            at dalvik.system.NativeStart.main(Native Method)

代码,我注册我的广播

代码语言:javascript
复制
public static void registerAlarm_calibrateMode(Context context){

        for (int i = 0; i < NODE_SLOT.length; i++) {

            Log.e("registerAlarm_calibrateMode", NODE_SLOT[i]+" :: "+getNodeSerial(context,NODE_SLOT[i]));

            if (!getNodeSerial(context,NODE_SLOT[i]).equals("null")) {

                Intent intent = new Intent(context, BroadcastReceiver_CalibrateMode.class);
                Log.e("registerAlarm_calibrateMode", "putExtra-->"+NODE_SLOT[i]);
                intent.putExtra("NODE_SLOT", NODE_SLOT[i]);
                PendingIntent pi = PendingIntent.getBroadcast(
                        context,
                        GET_NODE_BROADCAST_ID_FOR_CALIBRATE_MODE[getNodeID(NODE_SLOT[i])],
                        intent,
                        Intent.FILL_IN_DATA
                );
                AlarmManager alarm = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);

                Calendar now = Calendar.getInstance();
                now.add(Calendar.MINUTE,1);

                if (android.os.Build.VERSION.SDK_INT < 19) {
                    alarm.set(AlarmManager.RTC_WAKEUP, now.getTimeInMillis(), pi);
                } else {
                    alarm.setExact(AlarmManager.RTC_WAKEUP,now.getTimeInMillis(),pi);
                }
            }
        }
    }

XML清单

代码语言:javascript
复制
    <receiver android:name=".BroadcastReceiver_SleepMode"/>
    <receiver android:name=".BroadcastReceiver_Location"/>
    <receiver android:name=".BroadcastReceiver_CalibrateMode"/>
    <receiver android:name=".BroadcastReceiver_TempLog"/>
EN

回答 1

Stack Overflow用户

发布于 2014-12-04 19:54:31

替换流动代码BroadcastReceiver_CalibrateMode.java

代码语言:javascript
复制
public class BroadcastReceiver_CalibrateMode extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {


        Log.e("BroadcastReceiver_CalibrateMode", String.valueOf(intent));
        String slot = intent.getExtras().getString("NODE_SLOT");
        Log.e("BroadcastReceiver_CalibrateMode", slot); // NPE ON THIS LINE

        Intent calibrateIntent = new Intent(context, Service_MQTTPush.class);
        calibrateIntent.putExtra("CALIBRATE_MODE",true);
        calibrateIntent.putExtra("NODE_SLOT", slot);

        calibrateIntent .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // SPCIAL CODE

        context.startService(calibrateIntent);
    }
}

当调用startActivity时,新活动将与调用者位于同一个屏幕堆栈(上下文)中。有时,调用方可能没有活动上下文,例如,从Broadcastreceive.onReceive()方法启动活动或从服务启动活动。在这些情况下,调用FLAG_ACTIVITY_NEW_TASK",将导致“从活动上下文外部调用startActivity()”的例外情况,因为新的活动不存在上下文。

为了解决这个问题,将FLAG_ACTIVITY_NEW_TASK设置为以下意图,然后将为新活动创建一个新的上下文。

myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26445642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档