意图额外内容未在特定设备上提供

时间:2018-09-07 03:44:14

标签: android android-intent

在活动A中,我基本上有:

Long customerId = 123;
intent.putExtra("customerId", customerId);
startActivity(intent);

在活动B的onCreate()中,我有:

mCustomerId = getIntent().getLongExtra("customerId", -1);

但是对于我的一位用户(Nexus 4,Android 6.0.1),mCustomerId在活动B中解析为-1(默认值为-1)。该代码对我的其他1000个用户都适用。

同一用户在我使用的库中收到额外的意图时也有类似的问题:

https://github.com/Ereza/CustomActivityOnCrash/issues/56

这怎么发生?

日志:

Fatal Exception: java.lang.IllegalArgumentException
Update is not supported for content://appinventor.ai_GavinGT.TipTracker_9_1_426am_ready_for_market/customers/-1
appinventor.ai_GavinGT.DeliveryTipTrackerPro_ready_for_market.data.TipProvider.update (TipProvider.java:326)
android.content.ContentProvider$Transport.update (ContentProvider.java:355)
android.content.ContentResolver.update (ContentResolver.java:1364)
appinventor.ai_GavinGT.DeliveryTipTrackerPro_ready_for_market.customer_info.CustomerProfileActivity.saveChanges (CustomerProfileActivity.java:208)
appinventor.ai_GavinGT.DeliveryTipTrackerPro_ready_for_market.customer_info.CustomerProfileActivity.access$400 (CustomerProfileActivity.java:58)
appinventor.ai_GavinGT.DeliveryTipTrackerPro_ready_for_market.customer_info.CustomerProfileActivity$6.onDebouncedClick (CustomerProfileActivity.java:137)
appinventor.ai_GavinGT.DeliveryTipTrackerPro_ready_for_market.custom_classes.DebouncedOnClickListener.onClick (DebouncedOnClickListener.java:39)
android.view.View.performClick (View.java:5204)
android.view.View$PerformClick.run (View.java:21153)
android.os.Handler.handleCallback (Handler.java:739)
android.os.Handler.dispatchMessage (Handler.java:95)
android.os.Looper.loop (Looper.java:148)
android.app.ActivityThread.main (ActivityThread.java:5420)
java.lang.reflect.Method.invoke (Method.java)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:726)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:616)

从日志的第二行可以看到,当-1应该作为客户表的rowId插入时应为123(123仅作为示例,rowId可以是大于0的任何数字)。

编辑:我开始认为这个家伙可能正在ADB中闲逛我的应用程序。那可以解释为什么没有提供意图的附加内容:

A user is somehow accessing Pro features in the Free version

4 个答案:

答案 0 :(得分:1)

如果您将活动A的额外内容传递给一个意图,而接收活动B的onCreate()却未收到它们,则活动B已经存在于android backstack中,并且这些额外内容不会被捕获在onCreate()中,但是它们可以在onNewIntent()中找到请尝试以下代码:

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    mCustomerId = getIntent().getLongExtra("customerId", -1);

}

希望这可以肯定地工作。

答案 1 :(得分:1)

确保您未使用标准(默认)以外的其他启动模式。如果在清单文件中的接收活动中使用launchMode属性,则必须相应地处理接收活动(如果当前任务中已经存在活动,则可能必须重写onNewIntent方法)。 有关更多信息,请阅读此文档- https://developer.android.com/guide/components/activities/tasks-and-back-stack

答案 2 :(得分:0)

Yes, You can do like this:-

In First Activity  ,customerId is in the long format.

Long customerId = 123;
intent.putExtra("customerId", customerId);
startActivity(intent);

But in Second Activity,do like this
long defaultVal= -1;
mCustomerId = getIntent().getLongExtra("customerId", defaultVal);

Perhaps ,This will give you a better solution.
   Thanks.

答案 3 :(得分:0)

尝试这样做:

    Intent intent = new Intent(MainActivity.this,Main2Activity.class);
    Long customerId = Long.valueOf(123);
    intent.putExtra("customerId", customerId);
    startActivity(intent);