2016-03-30 10 views
0

基本的に、Androidアプリでデータを保存して読み込もうとしています。これは、ホームボタンを押してアプリを再入力するときに意図したとおりに動作します。アプリマネージャーで初めてアプリを終了しても、正しいデータ(テスト目的のために現時点では1つの整数)で正常に読み込まれます。アプリがアプリケーションマネージャーで2回目に閉じられると、データは最初と同じ方法で強制終了されても失われます。保存、読み込み、および関連する方法を扱うコードを以下に示します。Android:データを保存しようとしましたが、2回目のonDestroy()で失われています

Androidのライフサイクルメソッド:

public int setting1 = 0; 

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

    loadData(); 

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
    this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 

    AdView mAdView = (AdView) findViewById(R.id.adView); 
    AdRequest adRequest = new AdRequest.Builder().build(); 
    mAdView.loadAd(adRequest); 
} 

@Override 
public void onPause() { 
    super.onPause(); 
    saveData(); 
} 

@Override 
public void onStop() { 
    super.onStop(); 
    saveData(); 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    saveData(); 
} 

@Override 
public void onResume() { 
    super.onResume(); 

    loadData(); 

    updateUnlockables(setting1); 
} 

保存と読み込み方法:

public void saveData(){ 
    String filename = "icesSave.asv"; 
    FileOutputStream fos; 

    try { 
     fos = openFileOutput(filename, Context.MODE_PRIVATE); 
     ObjectOutputStream oos = new ObjectOutputStream(fos); 
     oos.writeInt(setting1); 
     oos.close(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

public void loadData(){ 
    String filename = "icesSave.asv"; 
    FileInputStream fis; 

    try{ 
     fis = openFileInput(filename); 

    } catch (FileNotFoundException ex){ 
     return; 
    } 
    try { 

     ObjectInputStream ois = new ObjectInputStream(fis); 
     setting1 = ois.readInt(); 
     ois.close(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
+0

saveData();ラインスーパーの前に。すべてのonPause、onDestroy、onStopのうちのどれか。 –

答えて

1

saveData()があるため、すべての3方法でsuper

いけない使用saveData()に上記する必要があります同じproce ss

 @Override 
     public void onPause() { 
    saveData(); 
      super.onPause(); 

     } 

     @Override 
     public void onStop() { 
saveData(); 
      super.onStop(); 

     } 

     @Override 
     public void onDestroy() { 
    saveData(); 
      super.onDestroy(); 

     } 
+0

これは間違いなく私の問題を解決しました。ありがとうございます。すぐに最善の答えで更新されます。 –

+0

注意:上記のようにonPause()にのみデータを保存してください。 3つの "kill"メソッドのすべてでデータを保存すると、保存メソッドが破損しているように見えました(または保存時に間違ったデータを書き込んだようです)。理由は分かりませんが、onPause()に一度だけ保存してください。 –

関連する問題