简体   繁体   English

在恢复活动期间如何触发片段的onActivityResult

[英]How is it possible that fragment's onActivityResult will be triggered during activity resuming

Normally, this is how my fragment's onActivityResult being triggered. 通常,这就是触发片段的onActivityResult

public void onActivityResult(final int requestCode, final int resultCode, final Intent data)

(1) Starting an intent through startActivityForResult from fragment (1)通过片段中的startActivityForResult启动意图

Intent intent = new Intent(this.getActivity(), NewBuyPortfolioFragmentActivity.class);
startActivityForResult(intent, RequestCode.REQUEST_NEW_BUY_PORTFOLIO_FRAGMENT_ACTIVITY);

(2) Set result and finish from the launched activity (2)设置结果并从启动的活动中完成

setResult(RESULT_OK, resultIntent);
finish();

(3) Fragment's onActivityResult will be triggered (3)片段的onActivityResult将被触发

However, under very rare case (I'm not able to reproduce), I will receive such crash report. 但是,在极少数情况下(我无法复制),我将收到此类崩溃报告。

It seems that during activity resuming, my fragment onActivityResult will be triggered, with its requestCode matched to my application requestCode (RequestCode.REQUEST_NEW_BUY_PORTFOLIO_FRAGMENT_ACTIVITY). 似乎在恢复活动期间,我的片段onActivityResult将被触发,其requestCode与我的应用程序requestCode (RequestCode.REQUEST_NEW_BUY_PORTFOLIO_FRAGMENT_ACTIVITY)匹配。

Any idea why fragment's onActivityResult will be triggered during activity resuming? 知道为什么在活动恢复期间会触发片段的onActivityResult吗?

java.lang.RuntimeException: Unable to resume activity {org.yccheok.jstock.gui/org.yccheok.jstock.gui.JStockFragmentActivity}: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=196615, result=-1, data=Intent { (has extras) }} to activity {org.yccheok.jstock.gui/org.yccheok.jstock.gui.JStockFragmentActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2124)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2139)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1672)
at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:2836)
at android.app.ActivityThread.access$1600(ActivityThread.java:117)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:939)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3687)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=196615, result=-1, data=Intent { (has extras) }} to activity {org.yccheok.jstock.gui/org.yccheok.jstock.gui.JStockFragmentActivity}: java.lang.NullPointerException
at android.app.ActivityThread.deliverResults(ActivityThread.java:2536)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2111)
... 13 more
Caused by: java.lang.NullPointerException
at org.yccheok.jstock.gui.portfolio.BuyPortfolioFragment.void addTransaction(org.yccheok.jstock.portfolio.Transaction)(SourceFile:733)
at org.yccheok.jstock.gui.portfolio.PortfolioFragment.void onActivityResult(int,int,android.content.Intent)(SourceFile:661)
at android.support.v4.app.FragmentActivity.void onActivityResult(int,int,android.content.Intent)(SourceFile:161)
at org.yccheok.jstock.gui.JStockFragmentActivity.void onActivityResult(int,int,android.content.Intent)(SourceFile:988)
at android.app.Activity.dispatchActivityResult(Activity.java:3908)
at android.app.ActivityThread.deliverResults(ActivityThread.java:2532)
... 14 more

Note, if NPE is being thrown in onActivityResult during the 3 steps normal flow I mention above, I will be getting the below stack trace, without Unable to resume activity message. 注意,如果在我上面提到的3个步骤的正常流程中,在onActivityResult中抛出了NPE,我将获得以下堆栈跟踪,而没有Unable to resume activity消息。

Crash report produced from normal onActivityResult flow. 由正常的onActivityResult流生成的崩溃报告。

FATAL EXCEPTION: main
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=196615, result=-1, data=Intent { (has extras) }} to activity {org.yccheok.jstock.gui/org.yccheok.jstock.gui.JStockFragmentActivity}: java.lang.NullPointerException
    at android.app.ActivityThread.deliverResults(ActivityThread.java:3141)
    at android.app.ActivityThread.handleSendResult(ActivityThread.java:3184)
    at android.app.ActivityThread.access$1100(ActivityThread.java:130)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1243)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4745)
    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:786)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
    at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
    at org.yccheok.jstock.gui.portfolio.BuyPortfolioFragment.addTransaction(BuyPortfolioFragment.java:734)
    at org.yccheok.jstock.gui.portfolio.PortfolioFragment.onActivityResult(PortfolioFragment.java:661)
    at android.support.v4.app.FragmentActivity.onActivityResult(FragmentActivity.java:161)
    at org.yccheok.jstock.gui.JStockFragmentActivity.onActivityResult(JStockFragmentActivity.java:988)
    at android.app.Activity.dispatchActivityResult(Activity.java:5192)
    at android.app.ActivityThread.deliverResults(ActivityThread.java:3137)
    ... 11 more

It possible that fragment's onActivityResult will be triggered during activity resuming by doing this- 通过执行以下操作,可能会在活动恢复期间触发片段的onActivityResult:

Actually i am not getting how u have managed your fragment but i am providing u two solutions... on the basis of above code. 实际上,我没有得到您如何管理您的片段,但是我根据上面的代码为您提供了两种解决方案...。

1. In your case it is null pointer exception so u can check null before super.onActivityResult of your fragment activity. 1.在您的情况下,这是空指针异常,因此您可以在片段活动的super.onActivityResult之前检查null。

2. Just put ur code "Intent intent = new Intent(this.getActivity(), NewBuyPortfolioFragmentActivity.class); startActivityForResult(intent, RequestCode.REQUEST_NEW_BUY_PORTFOLIO_FRAGMENT_ACTIVITY);" 2.只需输入您的代码“ Intent intent = new Intent(this.getActivity(),NewBuyPortfolioFragmentActivity.class); startActivityForResult(intent,RequestCode.REQUEST_NEW_BUY_PORTFOLIO_FRAGMENT_ACTIVITY);” on click of fragment item or any where from where u want to switch on NewBuyPortfolioFragmentActivity and from there just "Intent resultIntent; resultIntent = new Intent(this, ImageFragment.class); setResult(RESULT_OK, resultIntent); finish();" 在单击片段项目或您要从其打开NewBuyPortfolioFragmentActivity的任何位置单击,然后从那里开始“ Intent resultIntent; resultIntent = new Intent(this,ImageFragment.class); setResult(RESULT_OK,resultIntent); finish();”

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM