2016-03-30 29 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()中保存一次。 –

相关问题