kak*_*a47 4 android bundle android-intent
我有三个活动,我可以称之为A,B和C.我想在这三个活动之间传递信息:A - > B - > C - > A. 在AI中想要检查是否有传递包(第一次启动时,例如不会有一个).数据从AB传递,带有正常捆绑.从B - > CI使用此:
Intent i = new Intent(getApplicationContext(), FlashcardView.class);
i.putExtra("rattning", rattning);
i.putExtra("noqs", noqs);
i.putExtra("categoryid", categoryid);
CreateTestView.this.finish();
startActivityForResult(i, 0);
Run Code Online (Sandbox Code Playgroud)
它被收到然后发送到A这样:
Intent data = new Intent(FlashcardView.this, MenuView.class);
data.putExtra("point", point);
data.putExtra("noqs", noqs);
setResult(RESULT_OK, data);
finish();
Run Code Online (Sandbox Code Playgroud)
在A收到这样的:
@Override
protected void onActivityResult( int req, int resp, Intent data ) {
super.onActivityResult(req, resp, data);
// process your received "data" from GameActivity ...
Bundle b = getIntent().getExtras();
noqs = b.getInt("noqs");
point = b.getInt("point");
mTvCat.setText("hhhhhh"+point+noqs);
publishOnFacebook(point,noqs);
}
Run Code Online (Sandbox Code Playgroud)
看起来好像捆绑在从C - > A的路上丢失了.当我从C - > B传回来时没有问题.我认为这是因为B是启动C的活动,因此C回落到B而不是A.我通过在B上调用finish()进行复飞,所以C回到A而不是.坚持这样做我失去了捆绑.或者至少我是这么认为的.
谁看过这个吗?有没有更好的方法呢?如何在两次以上的活动之间传递时防止丢失捆绑?谢谢!
编辑:
编辑:这是接收广播时的错误代码:
03-07 12:57:59.394: ERROR/AndroidRuntime(803): java.lang.RuntimeException: Error receiving broadcast Intent { act=my_action (has extras) } in com.crystalcodeab.Flashcard.MenuView$1@47681ad0
03-07 12:57:59.394: ERROR/AndroidRuntime(803): at android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args.run(ActivityThread.java:981)
03-07 12:57:59.394: ERROR/AndroidRuntime(803): at android.os.Handler.handleCallback(Handler.java:587)
03-07 12:57:59.394: ERROR/AndroidRuntime(803): at android.os.Handler.dispatchMessage(Handler.java:92)
03-07 12:57:59.394: ERROR/AndroidRuntime(803): at android.os.Looper.loop(Looper.java:143)
03-07 12:57:59.394: ERROR/AndroidRuntime(803): at android.app.ActivityThread.main(ActivityThread.java:5068)
03-07 12:57:59.394: ERROR/AndroidRuntime(803): at java.lang.reflect.Method.invokeNative(Native Method)
03-07 12:57:59.394: ERROR/AndroidRuntime(803): at java.lang.reflect.Method.invoke(Method.java:521)
03-07 12:57:59.394: ERROR/AndroidRuntime(803): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
03-07 12:57:59.394: ERROR/AndroidRuntime(803): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
03-07 12:57:59.394: ERROR/AndroidRuntime(803): at dalvik.system.NativeStart.main(Native Method)
03-07 12:57:59.394: ERROR/AndroidRuntime(803): Caused by: java.lang.NullPointerException
03-07 12:57:59.394: ERROR/AndroidRuntime(803): at com.crystalcodeab.Flashcard.MenuView$1.onReceive(MenuView.java:56)
03-07 12:57:59.394: ERROR/AndroidRuntime(803): at
Run Code Online (Sandbox Code Playgroud)
我认为问题在于你如何完成活动B.当你完成活动B时,B的结果被发送回A并且活动消失了.C无法知道它应该将结果返回给A,因为它只知道活动B.
我的建议是你应该在活动A中使用BroadcastReceiver.然后在活动C中你可以发送一个广播,其中包含你希望被A接收的数据:
在一个:
IntentFilter filter = new IntentFilter("my.action");
BroadcastReceiver receiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals("my.action")) {
// Do my stuff
}
}
}
registerReceiver(receiver, filter);
Run Code Online (Sandbox Code Playgroud)
在C:
Intent data = new Intent("my.action");
data.putExtra("point", point);
data.putExtra("noqs", noqs);
sendBroadcast(data);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4600 次 |
| 最近记录: |