在活动A中,我基本上有:
Long customerId = 123;
intent.putExtra("customerId", customerId);
startActivity(intent);在活动B的onCreate()中,我有:
mCustomerId = getIntent().getLongExtra("customerId", -1);但是对于我的一个用户(Nexus4,Android6.0.1),mCustomerId在活动B中解析为-1 (-1是默认值)。这段代码对我的其他1000个用户来说工作得很好。
同一个用户在我使用的库中接收额外的intent时也遇到了类似的问题:
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作为customer表的rowId,而它应该是123 (123只是一个示例,rowId可以是任何大于0的数字)。
编辑:我开始认为这个家伙可能会在ADB中查看我的应用程序。这就解释了为什么意图附加没有被交付:
A user is somehow accessing Pro features in the Free version
发布于 2018-09-07 13:56:26
确保您没有使用除标准(默认)以外的任何launchMode。如果您在清单文件中的接收活动中使用launchMode属性,则必须相应地处理接收活动(如果当前任务中已存在活动,则可能必须覆盖onNewIntent方法)。有关更多信息,请阅读此文档- https://developer.android.com/guide/components/activities/tasks-and-back-stack
发布于 2018-09-07 12:59:04
如果你向来自活动A的意图传递额外的内容,但接收活动B的onCreate()没有接收到它们,那么活动B已经存在于安卓后台堆栈中,额外的内容不会被onCreate()捕获,但可以在onNewIntent()中找到,请尝试下面的代码:
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
mCustomerId = getIntent().getLongExtra("customerId", -1);
}希望这将肯定会起作用。
发布于 2018-09-07 12:45:56
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.https://stackoverflow.com/questions/52214960
复制相似问题