2016-03-30 69 views
0

基本上,我試圖用我的Android應用程序保存和加載數據。按下主頁按鈕時,它會按預期工作,然後重新進入應用程序。即使通過應用程序管理器第一次關閉應用程序,它會正確加載正確的數據(目前只有一個整數用於測試目的)。第二次通過應用程序管理器關閉應用程序時,即使數據使用與第一次相同的方法死亡,數據也會丟失。查找下面的代碼處理任何保存,加載和相關的方法。Android:試圖保存數據,但它在第二次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); 
} 

Save和Load方法:

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()應高於上super

不使用saveData()在所有3個方法,因爲其相同的程序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()中保存一次。 –

相關問題