gpt4 book ai didi

java - 使用 Activity 上下文将自定义对象从 Activity 传输到 Activity ?

转载 作者:行者123 更新时间:2023-12-01 11:18:47 32 4
gpt4 key购买 nike

问题有点复杂,首先, Activity A 和 Activity B 的 list 中都有 android:noHistory = true 。我有一个自定义 serialized 类,假设 MyClass ,该自定义类实际上通过构造函数存储 Activity B 的上下文。我在 Activity B 中有一个类型为 MyClass 的对象名称 obj ,现在我想通过 Intent 将该对象传输到 Activity C ,当 Activity B 中按下 >后退按钮。

从 Activity A 中,有一个按钮可以毫无问题地打开 Activity B,当我尝试在 onBackPressed() 中通过 B 打开 Activity C 并传输可序列化对象时,问题就开始了。我在 Activity C 中收到 NULL

[更新]我的类(class):

@SuppressWarnings("serial")
public class MyClass implements Serializable{

private final String SHAREDKEY_HIGHSCORE = "High Scores";
private final String FIELDKEY_HIGHSCORE = "HighScore";
private final String FIELDKEY_HIGHTIME = "HighTime";
private SharedPreferences sp;
private SharedPreferences.Editor spEditor;

public MyClass(Context context) {
resetScore();
sp = context.getSharedPreferences(SHAREDKEY_HIGHSCORE, Context.MODE_PRIVATE);
spEditor = sp.edit();
}

public void resetScore(){
newTime = 0;
newScore = 0;
highTime = 0;
highScore = 0;
}
}

Activity B:

public class ActivityB extends Activity {
MyClass scores;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_b);
scores = new MyClass(this);
}

@Override
public void onBackPressed() {
Intent intent = new Intent(this, ActivityC.class);
in.putExtra("Scores", scores);
startActivity(intent);
}
}

Activity C:

public class ActivityC extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_c);
MyClass score = (MyClass) getIntent().getSerializableExtra("Scores");
//score is null here always
}
}

list :

<activity
android:name=".ActivityA"
android:noHistory="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".ActivityB"
android:noHistory="true">

</activity>
<activity android:name=".ActivityC">

如何在 Activity C中成功接收我的自定义类(class)?请帮忙

最佳答案

问题显然就在这里//无论如何我都必须存储 Activity B 的上下文

不!您不必存储 Activity B 的上下文。您尝试这样做的原因是错误的。

在 Android 中,您绝不能尝试将 Activity 保留的时间超过其生命周期,并且绝不能尝试序列化 Context。它就是不能像这样工作,这就是它不能工作的原因。

我将其作为答案(而不是评论),因为事实就是如此。

问题的解决方案是:重新思考应用的架构。通过 Activity 传递或共享信息有几种不同的正确方法,但尝试保持上下文并将其序列化不是其中之一。

关于java - 使用 Activity 上下文将自定义对象从 Activity 传输到 Activity ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31496227/

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