Java 如何从一个活动和另一个活动向数组列表添加元素

Java 如何从一个活动和另一个活动向数组列表添加元素,java,android,arraylist,Java,Android,Arraylist,我正在制作一个由多项选择题组成的应用程序。每个问题都有自己的活动,例如QuestionTwoActivity。每次用户单击按钮(例如回答a的按钮)时,都会将其移动到下一个活动,例如从QuestionTwoActivity到QuestionTwoActivity。如果答案正确,他们的分数会增加3分。它有十个问题,总的分数可能是30分 我的应用程序的这一部分运行得很好,但问题是在我想要在GradeActivity上显示最终预览时开始的,该预览最初只显示用户的最终成绩。我想在grade活动中添加一个列

我正在制作一个由多项选择题组成的应用程序。每个问题都有自己的活动,例如
QuestionTwoActivity
。每次用户单击按钮(例如回答a的按钮)时,都会将其移动到下一个活动,例如从
QuestionTwoActivity
QuestionTwoActivity
。如果答案正确,他们的分数会增加3分。它有十个问题,总的分数可能是30分

我的应用程序的这一部分运行得很好,但问题是在我想要在
GradeActivity
上显示最终预览时开始的,该预览最初只显示用户的最终成绩。我想在grade活动中添加一个列表,显示用户对每个问题的答案,如果用户回答正确与否,那么我制作了一个自定义arrayAdapter来填充列表,然后尝试使用每个答案的onclick方法根据回答的问题向arrayadapter的arraylist添加元素,但这导致应用程序崩溃

以下是仅在回答第十个问题后才会打开的
grade活动的代码:

导入android.support.v7.app.app活动;
导入android.os.Bundle;
导入android.widget.ListView;
导入android.widget.TextView;
导入java.util.ArrayList;
公营班级活动{
examark mExamGrade;//声明examark类的实例以调用getMark方法
double mark;//用于存储考试分数的int对象
文本视图管理器文本视图;
text视图mNameTextView;
ListView mPreviewListView;
静态ArrayList mPreviewArrayList;
预览适配器mPreviewAdapter;
examark名称;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_grade);
int colorRed=getResources().getColor(R.color.colorRed);
int colorOrange=getResources().getColor(R.color.colorOrange);
int colorYellow=getResources().getColor(R.color.colorYellow);
int colorGreen=getResources().getColor(R.color.colorGreen);
mExamGrade=new examark();
name=newexamark();
mark=mExamGrade.getExamMark();//将考试分数存储在mark变量中
mgradextview=(TextView)findViewById(R.id.grade);//初始化负责显示最终标记的视图
mgradextview.setText(String.valueOf(mark));
mNameTextView=(TextView)findViewById(R.id.name\u text\u view);
字符串nameOfQuizzer=name.getNameOfQuizTaker();
mNameTextView.setText(测验者的名字);
mPreviewArrayList=新的ArrayList();
mPreviewAdapter=新的PreviewAdapter(这是mPreviewArrayList);
mPreviewListView=(ListView)findViewById(R.id.preview\u列表);
设置适配器(mPreviewAdapter);
//一个条件语句,用于根据性能的好坏更改等级的颜色
如果(标记>0.0&&标记<10.0){
mgradextview.setTextColor(colorRed);
}否则如果(标记>10.0和标记15.0和标记<20.0){
mgradextview.setTextColor(colorYellow);
}否则,如果(标记>20.0){
mgradextview.setTextColor(颜色绿色);
}
}
}
以下是其中一个答案onclickListner的代码:

mAnswerATextView.setText(“工党”);
mAnswerATextView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
Grade.mPreviewArrayList.add(新答案和预览数据(“1”,“问题A的答案”,“问题1的真实答案”,R.color.colorGreen,R.drawable.correct));
意向openQuestion=新意向(问题1.this,问题2.class);
星触觉(开放性问题);
mExamark.incrementMark();
}
});
单击“应答”按钮时,调试器菜单会显示以下内容:

E/AndroidRuntime:致命异常:主
进程:com.example.admin.xams,PID:16254
java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“boolean java.util.ArrayList.add(java.lang.Object)”
在com.example.admin.xams.QuestionOne$1.onClick上(QuestionOne.java:52)
在android.view.view.performClick上(view.java:4848)
在android.view.view$PerformClick.run(view.java:20270)
位于android.os.Handler.handleCallback(Handler.java:815)
位于android.os.Handler.dispatchMessage(Handler.java:104)
位于android.os.Looper.loop(Looper.java:194)
位于android.app.ActivityThread.main(ActivityThread.java:5667)
位于java.lang.reflect.Method.invoke(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:372)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:962)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:757)

在打开包含arraylist的活动(设置为onCreate)之前,是否有方法从其他活动向arraylist添加元素?

您可以实现以下选项之一:

  • 错误但快速-初始化
    活动的构造函数中的列表,而不是
    onCreate()
    方法
  • 适当但缓慢-将值存储在数据库中,并在需要时提取它们

您可以实施以下选项之一:

  • 错误但快速-初始化
    活动的构造函数中的列表,而不是
    onCreate()
    方法
  • 适当但缓慢-将值存储在数据库中,并在需要时提取它们

    • 您可以遵循单例模式。本质上,您希望创建一个可以从任何地方访问的全局列表。您可以把它放在几个地方,我建议扩展
      应用程序
      ,并将其放在那里以供参考
      public class MyApp extends Application {
      
          // A public static list of answers
          public static ArrayList<answers_preview_data> answers = new ArrayList<>();
      
          @Override
          public void onCreate() {
              super.onCreate();
              // do other app setup ...
          }
      }
      
      public class QuestionOne extends AppCompatActivity implements View.OnClickListener {
      
          @Override
          public void onClick(View v) {
              // Adding the new answer to your list.
              MyApp.answers.add(new answers_preview_data());
          }
      
      }
      
      public class Grade extends AppCompatActivity {
      
          private ArrayList<answers_preview_data> mPreviewArrayList;
      
          @Override
          protected void onCreate(@Nullable Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
      
              mPreviewArrayList = MyApp.answers;
              // use your list ...
          }
      }