2016-11-22 7 views
0

ショッピングカートのIDを保存するためにSharedPreferencesをHomeActivity.javaに追加しました。アプリが開くとSharedPreferencesが自動的に消去されます

SharedPreferences cartItems = getSharedPreferences("AddedItems", Context.MODE_PRIVATE); 
SharedPreferences.Editor editor = cartItems.edit(); 
if (cartItems.getStringSet("AddedItems", null) == null){ 
    Set<String> cart = new HashSet<String>(); 
    editor.putStringSet("AddedItems", cart); 
    editor.apply(); 
} else { 
    Set<String> cart = cartItems.getStringSet("AddedItems", null); 
} 

あなたが見ることができるように、cartItems.getStringSet("AddedItems", null)が存在しているかどうかを確認することになっコード:これは、ランチャーの活動である私はHomeActivity.javaにそれのために初期化されたコードを、です。存在する場合はcartcartItems.getStringSet("AddedItems", null)の内容に設定しますが、存在しない場合はcartを新しいHashSet<String>として定義し、cartItems SharedPreferencesに追加します。

何らかの理由でcartItems.getStringSet("AddedItems")がnullに等しいと思われるため、アプリが開くたびにカートをリセットするたびにリセットされます。

これは私がSharedPreferencesにIDを追加する方法です:

HomeActivity.cart.add(productId); 
HomeActivity.editor.putStringSet(HomeActivity.AddedItems, HomeActivity.cart); 
HomeActivity.editor.apply(); 

にはどうすればいいので、それはアプリが開きますcartItems.getStringSet("AddedItems")たびにリセットされないことを修正できますか?

+0

apply()の代わりにcommit()を使用し、問題が継続するかどうかを確認してください。 –

+0

ハッシュセットにいくつかの項目を追加してみてください。 –

+0

HomeActivity.AddedItemsが "AddedItems"と等しいことは間違いありませんか?これらのすべてのキーに同じ静的最終変数を使用する必要があります。 –

答えて

0

これを試してみてください:

SharedPreferencesのcartItems =のgetSharedPreferences( "AddedItems"、Context.MODE_PRIVATEを)。 SharedPreferences.Editor editor = cartItems.edit();

if (Storedata != null){ 
     editor.putStringSet("AddedItems", Storedata); 
     editor.commit(); 
    } else { 
     Set<String> cart = cartItems.getStringSet("AddedItems", null); 
    } 

保存したいカートのIDです。

は、ご参考のためにこれを確認します。 http://androidopentutorials.com/android-sharedpreferences-tutorial-and-example/

+0

まだ動作しません –

+0

エディタに何も保存しません: – Varma460

+0

あなたの条件が間違っている場合: – Varma460

0
public class MainActivity extends AppCompatActivity { 

    private final String ADDED_ITEMS = "AddedItems1"; 

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

     Set<String> cart = new HashSet<>(); 

     SharedPreferences cartItems = getSharedPreferences(ADDED_ITEMS, Context.MODE_PRIVATE); 
     SharedPreferences.Editor editor = cartItems.edit(); 

     if (cartItems.getStringSet(ADDED_ITEMS, null) == null) { 
      cart.add("hello"); 
      editor.putStringSet(ADDED_ITEMS, cart); 
      editor.apply(); 
     } else { 
      cart = cartItems.getStringSet(ADDED_ITEMS, null); 
     } 

     Log.d("test", cart.toString()); //put a breakpoint here and look what cart contains 
    } 
} 

私はちょうどこのを数回実行し、それが正常に動作します。 getStringSetによって返される内容を編集しないでください。 sharedpreferencesからセットを取得し、それを新しい変数に割り当ててから、新しいプロダクトIDを追加して上書きします。

アプリケーションを再起動したときにHomeActivity.cartが空の場合は、プロダクトIDを1つ追加してから古い値を上書きします。あなたが新しいのproductIDを追加するとき

ので、次の操作を行います。

cart = cartItems.getStringSet("AddedItems", new HashSet<String>()); 
cart.add(productId); 
editor.putStringSet(HomeActivity.AddedItems, HomeActivity.cart); 
editor.apply(); 

サイドノート:HomeActivity.cartは、あなたが他のクラスの静的変数を使用している場合がありますことを私に言います。これをしないでください。 finalと表示されていないと値を保持することは保証できません。

関連する問題