我尝试使用SharedPreferences获取问题是否得到回答,但是它会获得所有问题的最后一个问题的状态(如果回答与否)
有人可以帮助我让它获得每个问题的状态吗?
以下是我的申请代码:
public class Question{
boolean answered;
public static int id;
String userAnswer;
String QuestionP = LogoQuiz.QuestionP;
public Question(int i, Context context){
SharedPreferences pref = context.getSharedPreferences(QuestionP, context.MODE_PRIVATE);
id = i;
answered = pref.getBoolean("answered"+i, false);
}
}
并计算了多少问题:
public class Main extends Activity {
public static ArrayList<Question> ques;
public static final String QuestionP = "QuestionSettings";
protected void onCreate(Bundle savedInstanceState) {
SharedPreferences pref = getSharedPreferences(QuestionP, MODE_PRIVATE);
Editor editor = pref.edit();
-------- activity ----------
-------- activity ----------
ques = new ArrayList<Question>();
for(int i = 0; i < QuestionsA.mPucIds.length; i++)
{
ques.add(new Question(i, Main.this));
CharSequence text = "";
if(pref.getBoolean("FirstRun", true))
{
text = "First Run";
Toast toast = Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT);
toast.show();
editor.putBoolean("FirstRun", false);
editor.putBoolean("answered"+i, false);
editor.commit();
}
}
}
}
回答
int id = Question.id;
editor.putBoolean("answered"+id, true).commit();
答案 0 :(得分:0)
您已将 id 变量声明为静态,这就是为什么它获取最后一个值,删除该修饰符并且您已完成。
已编辑我认为当问题得到解答时,您会从问题 问题实例获取 ID实例字段并且通过那个身份证你
editor.putBoolean("answered"+id, true).commit();
答案 1 :(得分:0)
首先,把
editor.commit()
在for循环之外。它不需要承诺这么多次。另外,通过输入
来检查'i'值Log.d("i value", Integer.toString(i));
在您的问题类中,以确保您收到要检查的正确值。代码似乎很好。
编辑:
更改
int id = Question.id;
到
int id = new Question(i, Main.this).id
静态变量'id'对于Question的所有副本副本都是相同的。
我建议阅读Java中的静态变量和方法。
答案 2 :(得分:0)
当您对变量使用static
修饰符时,无论您创建的该类的实例数是多少,该变量的值在所有实例中都将保持不变。
因此,请尝试删除static
的{{1}}修饰符,然后使用构造函数调用,如:
id
以便创建新实例。