2017-12-14 9 views
1

sharedPreferencesとint配列に関する簡単な質問です。これは私のコードの一部です(関連するビット)。私が何をしたいのかは、ユーザーが何かをする(関連性がないために漠然としている)場合、配列はその位置に2を保持します。代わりに何が起こるかは、私がアプリを閉じるかアクティビティを変更するたびに、配列は2つもないすべてのものに戻ります。これは些細な問題かもしれませんが、ごめんなさい。共有の設定から以前の配列を記憶しています

public class SecondActivity extends AppCompatActivity { 

    int[] list = { 1, 1, 1, 1, 1, 1 }; 

public void startAQuestion(View view){ 

    checkAnswerButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

       if(editText2.getText().toString().equals(mAnswer)) { 

        list[tappedQuestionmark]=2; 

        storeIntArray("updateList", list); 

        Log.i("The array is ", Arrays.toString(list)); 
       }  
      } 
      }); 
     } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_second); 

     int[] isCorrect = getFromPrefs("updateList"); 

     Log.i("is Correct is ", Arrays.toString(isCorrect)); 

    } 

    public void storeIntArray(String name, int[] array) { 
     SharedPreferences.Editor edit = this 
       .getSharedPreferences("com.example.sid.sharedpreferencedemo", Context.MODE_PRIVATE).edit(); 
     edit.putInt("Count_" + name, array.length).commit(); 
     int count = 0; 
     for (int i : array) { 
      edit.putInt("IntValue_" + name + count++, i).commit(); 
     } 
     edit.commit(); 
    } 

    public int[] getFromPrefs(String name) { 
     int[] ret; 
     SharedPreferences prefs = this.getSharedPreferences("com.example.sid.sharedpreferencedemo", 
       Context.MODE_PRIVATE); 
     int count = prefs.getInt("Count_" + name, 0); 
     ret = new int[count]; 
     for (int i = 0; i < count; i++) { 
      ret[i] = prefs.getInt("IntValue_" + name + i, i); 
     } 
     return ret; 
    } 

} 

答えて

1

アプリを開くたびにlist変数がすべて1に初期化されます。共有環境設定のリストをisCorrect配列にない変数listにロードする必要があります。これは、ボタンをクリックして共有環境設定に保存されたリストを更新する際に値を取得するためです。

かのonCreateで

は行います

list = isCorrect; 

と私はそれが動作するはずだと思います。

+0

ありがとうございました!これは動作します! – mathsislife

+0

最後に問題になることはありません。最初から開始するとき、変数isCorrectは[]と等しくなります。だからそこには何もないのでクラッシュする。コードの残りの部分を破棄することなく、これをどのように初期化すればよいでしょうか?ありがとう! – mathsislife

+0

私もあなたの最初の提案をしたときにこれが起こると言わなければなりません。私もリストを静的にしようとしましたが、それはまだ動作しませんでした。どんな助けでも大歓迎です。 – mathsislife

0

解決策は2つあります。

ソリューション1

あなたのint配列は、静的行い、活動渡すsavedInstanceを使用

SecondActivity.list[tappedQuestionmark]=2; 

ソリューション2 を使用する方法

public class SecondActivity extends AppCompatActivity { 

    public static int[] list = { 1, 1, 1, 1, 1, 1 }; 

public void startAQuestion(View view){ 
. 
. 

を参照してください。あなたの配列

public void onSaveInstanceState(Bundle outState){ 
    outState.putSerializable("list ", list); 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    list = savedInstanceState.getSerializable("list "); 

    if(list != null) 
    { 
      //Do something with list 
    } 

} 

私はあなたを助けてくれることを願っています!

+0

お返事ありがとうございました。最初の解決策はほとんど機能しましたが、アプリを終了して別のボックスを選択すると、まだ上書きされていました。私が意味するのは、配列を{1,1,1,1,1,1}としたアプリを起動したとき、1と3を次のように{2,1,2,1,1}とし、次にアプリを閉じて再び開き、0を2にすると、{2,1,1,1,1,1}が表示されます。 2番目のソリューションであるアンドロイドスタジオは、互換性のないタイプだと言っていますか?もしあなたがどちらかのヒントがあれば、私はとても感謝しています。おかげで – mathsislife

+0

申し訳ありませんが、私はうんざりしていた。だからこの投稿を見てくださいhttps://stackoverflow.com/questions/7175880/how-can-i-store-an-integer-array-in-sharedpreferences –

関連する問題