2016-06-02 2 views
1

Так что я пытаюсь сохранить данные в sharePreferences в onPaus() метод, я пробовал то же самое в onCreate() тоже не работает, вот код:SharedPreferences теряет данные, когда приложение разрушенную

public class Favorite extends Activity implements ListView.OnItemClickListener 
{ 
    private static final String PREFS_FILE = "com.example.stewiesh.eduguide.preferences1"; 
    private static final String KEY_FAVORITE = "Key_favorite"; 
    static ArrayList<String> uniID = new ArrayList<String>(); 
    /** SharedPreferences preferences; 
    SharedPreferences.Editor editor; **/ 
    ArrayAdapter<String> adapter; 
    ListView list; 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.favorite); 
     list = (ListView) findViewById(R.id.favoriteList); 
     adapter = new ArrayAdapter<String>(this, R.layout.list_layout); 
     list.setOnItemClickListener(this); 
     list.setAdapter(adapter); 
    // preferences = getSharedPreferences(PREFS_FILE, Context.MODE_PRIVATE); 
    // editor = preferences.edit(); 
    // setData(); 
     runOnUiThread(new Runnable() { 
      public void run() { 
       System.out.println("i am out"); 
       SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
       adapter.add(settings.getString(KEY_FAVORITE,"none of them is here bitch")); 
       adapter.notifyDataSetChanged(); 
      } 
     });; 
    } 
/** 
    public void setData() 
    { 
     for (int i = 0; i < Page2.responses.length; i++) 
     { 
      for(int j=0;j<uniID.size();j++) 
      { 
      if(Page2.responses[i].getPrograma().toString().equals(uniID.get(j))) 
      { 
       editor.clear(); 
       editor.putString(KEY_FAVORITE,Page2.responses[i].getFakulteti()+" -- "+Page2.responses[i].getUniversiteti()+" "+Page2.responses[i].getPrograma().toString()); 
      // editor.commit(); 
       // editor.apply(); 
      } 
      } 
     } 
    } 
**/ 
    @Override 
    protected void onPause() { 
     super.onPause(); 
    // preferences = getSharedPreferences(PREFS_FILE, Context.MODE_PRIVATE); 
     SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
     SharedPreferences.Editor editor = preferences.edit(); 
     for (int i = 0; i < Page2.responses.length; i++) 
     { 
      for(int j=0;j<uniID.size();j++) 
      { 
       if(Page2.responses[i].getPrograma().toString().equals(uniID.get(j))) 
       { 
        editor.clear(); 
        editor.putString(KEY_FAVORITE,Page2.responses[i].getFakulteti()+" -- "+Page2.responses[i].getUniversiteti()+" "+Page2.responses[i].getPrograma().toString()); 
        editor.commit(); 
       } 
      } 
     } 
     //editor.apply(); 
    } 

    public void onItemClick(AdapterView<?> parent, View view, int position, long id) 
    { 

    } 
} 

когда я уничтожу приложение, чем запустить его, он не дает мне ничего, я не могу получить, почему это не сохранение данных, я пробовал различные вещи, но ...

+1

Вы добавили журнал для блокировки сохранения данных в sharepreference, чтобы убедиться, что данные не имеют проблем? – phongvan

+0

yeap, я тестировал, что – NaughyPiligrim69

+0

Изменить фиксацию для применения? – phongvan

ответ

1

Прежде всего, вы должны удалить

runOnUiThread(new Runnable() 
{ 
    public void run() { 
}); 

эту часть из вашего кода:

runOnUiThread(new Runnable() { 
    public void run() { 
     System.out.println("i am out"); 
     SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
     adapter.add(settings.getString(KEY_FAVORITE,"none of them is here bitch")); 
     adapter.notifyDataSetChanged(); 
    } 
}); 

, потому что вы уже используете эту часть вашего кода в потоке пользовательского интерфейса, так что опять добавление runOnUiThread не имеет смысла.

Причина, по которой вы ничего не смогли спасти, - это то, что вы звонили editor.clear() в цикл.

Согласно документации:

ясно() - Марк в редакторе, чтобы удалить все значения из предпочтений.

Все, что вам нужно сделать, это просто поставить и совершить(), нет необходимости вызывать editor.apply()

 SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
       SharedPreferences.Editor editor = preferences.edit(); 
       for (int i = 0; i < Page2.responses.length; i++) 
       { 
        for(int j=0;j<uniID.size();j++) 
        { 
         if(Page2.responses[i].getPrograma().toString().equals(uniID.get(j))) 
         { 
      editor.putString(KEY_FAVORITE,Page2.responses[i].getFakulteti()+" -- "+Page2.responses[i].getUniversiteti()+" "+Page2.responses[i].getPrograma().toString()); 
         } 
        } 
       } 

       editor.commit(); 

Вам не нужно вверял только совершить, когда вы закончите ввод данных.

Смежные вопросы