gpt4 book ai didi

java - 从一项 Activity 转移到另一项 Activity 时,静态变量会重新初始化自身

转载 作者:行者123 更新时间:2023-12-01 04:44:31 26 4
gpt4 key购买 nike

我正在使用公共(public)类名常量,其中有静态变量。

/*
* Flags
*/
public static boolean gotCourse = false;
public static boolean quizTaken = false;

我正在第一个 Activity 中更改这些标志并移至第二个 Activity (我也退出第一个 Activity ),但在第二个 Activity 中我得到的是标志的初始值而不是更改后的值。为什么我遇到这个问题?应用程序的静态变量有限制吗?

而且我也不想通过 Intent 传递这些值,因为它们会使我的逻辑变得复杂。

第一个 Activity 的代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_moviewrapper);
Constants.quizTaken = extra.getBoolean("fromquiz", false);
Log.d(Constants.TAG,"Got Course Value: "+Constants.gotCourse);
if(Constants.gotCourse == false){
mGetDataTask = new GetDataTask();
mGetDataTask.execute();
Constants.gotCourse = true;
}else{
Log.d(Constants.TAG,"In Play");
playProgram();
}
Log.d(Constants.TAG,"Got Course Value: "+Constants.gotCourse);

}

我正在更改Constants.gotCourse = true;

第二个 Activity 代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(Constants.TAG,"Got Course Value in Video Wrapper: "+Constants.gotCourse);
}

任务代码:

private class GetDataTask extends AsyncTask<String, Void, Void> {
private final ProgressDialog dialog = new ProgressDialog(MovieWrapperActivity.this);

// can use UI thread here
protected void onPreExecute() {
this.dialog.setMessage("Loading...");
this.dialog.setCancelable(false);
this.dialog.show();
}

// automatically done on worker thread (separate from UI thread)
protected Void doInBackground(final String... args) {
getCourse();
return null;
}

// can use UI thread here
protected void onPostExecute(final Void unused) {
if (this.dialog.isShowing()) {
this.dialog.dismiss();
playProgram();
}
}
}

节目播放功能:

private void playProgram(){
Intent intent = new Intent(MovieWrapperActivity.this, VideoWrapperActivity.class);

int chap_played = extra.getInt("chapterplayed",-1);
Log.d(Constants.TAG,"Played: "+chap_played +" : chapter: "+Constants.mCourse.getTotalChapters());
if(chap_played == -1){
//Play 1st Chapter
intent.putExtra("chaptertoplay", 1);
//Chapter cha = mCourse.getmChapters().get(1);
intent.putExtra("videofile", Constants.mCourse.getmChapters().get(0).getVideoURL());
if(Constants.mCourse.getmChapters().get(0).isQuiz()){
Constants.quizTaken = false;
}else{
Constants.quizTaken = true;
}
}
else if (chap_played < Constants.mCourse.getmChapters().size()){
// For Playing 2nd to till last
if(Constants.mCourse.getmChapters().get(chap_played-1).isQuiz() && !Constants.quizTaken){

Intent in2 = new Intent(MovieWrapperActivity.this, QuestionWrapper.class);
in2.putExtra("chaptertoplay", chap_played);
Constants.quizTaken = true;
startActivity(in2);
//System.exit(0);

}else{
if(Constants.mCourse.getmChapters().get(chap_played).isQuiz()){
Constants.quizTaken = false;
}else{
Constants.quizTaken = true;
}
intent.putExtra("videofile", Constants.mCourse.getmChapters().get(chap_played).getVideoURL());
intent.putExtra("chaptertoplay", chap_played+1);
}

}
else if(chap_played == Constants.mCourse.getmChapters().size()){
// Move to End Knowlege Test Here
MovieWrapperActivity.this.finish();
}
Log.d(Constants.TAG,"Here...");
startActivity(intent);
System.exit(0);

}

编辑:还有一件事。当我没有完成第一个 Activity 并开始第二个 Activity 时,我在第二个 Activity 中得到改变的值。

更新:当我用 System.exit(0); 完成 Activity 时出现问题,但用 finish(); 完成时没有问题>。但是,当使用 finish(); 完成 Activity 时,它会导致更多运行时错误。

最佳答案

您应该将这些值提取到具有 getter 和 setter 的共享资源类中。这样,就可以在任何地方检索它们的内容。

关于java - 从一项 Activity 转移到另一项 Activity 时,静态变量会重新初始化自身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16058688/

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