2016-06-02 4 views
1

を破壊されたとき、私はあまりにもonCreate()で同じことをしようとしたデータが失われ、ここでは、動作しませんでしたコードです:SharedPreferencesは、アプリケーションがだから私は<code>onPaus()</code>方法でsharePreferencesにデータを保存しようとしています

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

ブロック保存にデータを追加して共有データを保存しましたか?データに問題がないことを確認しましたか? – 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を追加し、UIスレッドでのコードの一部を実行しているためでは無意味です。

何も保存できなかった理由は、ループ内で 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(); 

を呼び出す必要はありません。

関連する問題