SharedPreferences只获得一个字符串

时间:2014-08-02 10:44:22

标签: android sharedpreferences

我尝试使用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();

3 个答案:

答案 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

以便创建新实例。