0

必要なすべてのインポートが追加されます。SharedPreferencesコードが意図したとおりに動作しない

public class MainActivity extends AppCompatActivity { 

SharedPreferences preferences; 
SharedPreferences.Editor editor; 
public int i; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    preferences = getSharedPreferences("MyPrefs", MODE_PRIVATE); 
    editor = preferences.edit(); 

初めての起動中にメッセージ「初回ブート」が表示されますが、sharedPreferencesに保存された私は、表示されますイテレータの代わりに、次の時間帯に表示されません。

try{ 

     i = preferences.getInt("iterator", 0); 

     Toast.makeText(getApplicationContext(), i, Toast.LENGTH_SHORT).show(); 

    }catch(Exception e){ 
     Toast.makeText(MainActivity.this, "First time boot", Toast.LENGTH_SHORT).show(); 
    } 

    final TextView date = (TextView) (findViewById(R.id.textView)); 
    final Calendar c = Calendar.getInstance(); 
    date.setText(DateFormat.getDateFormat(this).format(c.getTime())); 

    final Button mainBtn = (Button) findViewById(R.id.mainBtn); 
    final Button exit = (Button) findViewById(R.id.exit); 

    mainBtn.setText("Clock In"); 

    mainBtn.setOnClickListener(new View.OnClickListener(){ 

     public void onClick(View v){ 
      if(mainBtn.getText() == "Clock In"){ 
       mainBtn.setText("Clock Out"); 
      }else{mainBtn.setText("Clock In");} 

      String s = new SimpleDateFormat("yyyy: MM: dd HH: mm: ss").format(Calendar.getInstance().getTime()); 

私の考えでは、ボタンをクリックすると、後でアクセスできるsharedPreferencesファイルにタイムスタンプが保存されます。

  editor.putString("Time "+ i, s); 

      i++; 

      editor.putInt("iterator", i); 

     } 
    }); 

あなたは終了]ボタンをクリックすると、sharedPreferencesファイルに入れ、すべてが保存されるように、私は最近、これを追加しました。 (以前のeditor.commit()行はmainBtnのonClickListenerの内側にありました)。

exit.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      editor.commit(); 
      finish(); 
     } 
    }); 
} 

問題ではなく、それだけで「初回ブート」と言い、アプリを終了して再起動し、それにより、アプリがsharedPreferencesファイルに保存することになっていた格納されたデータを、取得していないということです毎回プログラミングを始めたばかりで、この問題を複数の方法で克服しようとしましたが、同じ問題に遭遇しました。助けて!

答えて

0

私の知る限り、preferences.getInt( "iterator"、0); "iterator"が存在しない場合は例外をスローしません。 0が返されます。デフォルトは0です。さ

int iterator = preferences.getInt("iterator", -1); 
    if (iterator == -1) 
     Toast.makeText(this, "First time boot", Toast.LENGTH_SHORT).show(); 

そして、あなたはあなたの例外を見れば、私はこの問題は、あなたのgetInt後に乾杯から、実際のですよね(「イテレータ」、0)それを呼び出す:私はより多くのようなものにするようにコードを変更します文字列の代わりにintを渡します。

また、私はあなたのアプリを通してエディタを開いたままにしていません。私は通常、次のような関数を書くでしょう

void savePreference(String key, String value) { 
    SharedPreferences prefs = context.getSharedPreferences(PREFERENCES_NAME, 0); 
    SharedPreferences.Editor editor = prefs.edit(); 
    editor.putString(key, value); 
    editor.commit(); 
} 
関連する問題