gpt4 book ai didi

android - 在 Android 中的三个 Activity 之间传递包

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:54:10 26 4
gpt4 key购买 nike

我有三个 Activity ,可以称为 A、B 和 C。我想在这三个 Activity 之间传递信息,如下所示:A-->B-->C-->A。在 A 中,我想检查是否有一个包通过(例如,第一次,启动,不会有)。数据通过普通包从 A-B 传递。从 B-->C 我使用这个:

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);

它被接收然后像这样发送给 A:

  Intent data = new Intent(FlashcardView.this, MenuView.class);
data.putExtra("point", point);
data.putExtra("noqs", noqs);
setResult(RESULT_OK, data);
finish();

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);
}

似乎包裹在从 C-->A 的途中丢失了。当我将它从 C-->B 传回时,没有问题。我认为发生这种情况是因为 B 是启动 C 的 Activity ,因此 C 回落到 B,而不是 A。我通过在 B 上调用 finish() 进行了复飞,所以 C 回到了 A。但是在这样做时我失去了 bundle 。或者至少我是这么认为的。

有没有人见过这个?有更好的方法吗?如何防止在两个以上的 Activity 之间传递时丢失包?谢谢!

编辑:

编辑:这是接收广播的错误代码:

  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

最佳答案

我认为问题在于您如何完成 Activity B。当您完成 Activity B 时,B 的结果被发送回 A,Activity 消失了。 C 无法知道它应该将其结果返回给 A,因为它只知道 Activity B。

我对你的建议是你应该在 Activity A 中使用 BroadcastReceiver。然后在 Activity C 中你可以发送一个广播,其中包含你希望 A 接收到的数据:

在 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);

在 C 中:

Intent data = new Intent("my.action");
data.putExtra("point", point);
data.putExtra("noqs", noqs);
sendBroadcast(data);

关于android - 在 Android 中的三个 Activity 之间传递包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5218131/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com