2017-01-20 15 views
0

以下のコードは複数の選択された連絡先を取得してArrayListの形式で格納しますが、アプリケーションを閉じて選択した連絡先リストを開くと、アプリを閉じて開くと、データが削除されるまでデータが保持されます。誰も共有の設定を使用してArrayListの値を格納するのを助けてください。sharedpreferenceを使用してArrayList値のセットを格納する方法

private void chooseContact() { 
    Intent intentContactPick = new Intent(MainActivity.this,ContactsPickerActivity.class); 
    MainActivity.this.startActivityForResult(intentContactPick,CONTACT_PICK_REQUEST); 
} 

@Override 
public void onActivityResult(int requestCode,int resultCode,Intent data){ 
    super.onActivityResult(requestCode, resultCode, data); 

    if(requestCode == CONTACT_PICK_REQUEST && resultCode == RESULT_OK){ 


     ArrayList<Contact> selectedContacts = data.getParcelableArrayListExtra("SelectedContacts"); 

     String display=""; 
     for(int i=0;i<selectedContacts.size();i++){ 

      display += (i+1)+". "+selectedContacts.get(i).toString()+"\n"; 

     } 
     contactsDisplay.setText("Selected Contacts : \n\n"+display); 

    } 

} 

}

以下のコードは、選択された連絡先の値を保持するのArrayListです。

ArrayList<Contact> selectedContacts = data.getParcelableArrayListExtra("SelectedContacts"); 
+0

プリミティブデータ型のみをSharedPreferencesに保存できます...しかし、あなたはGsonライブラリを使ってSharedPreferencesにArrayListを格納することができます –

+0

SharedPreferencesではなくデータを格納するためにデータベースを使用します –

+0

[Create ArrayList to SharedPreferences](http://stackoverflow.com/questions/7057845/save-arraylist-to-sharedpreferences) –

答えて

1

あなたはオプションがあります。

  • サービスを使用してバックグラウンドで実行すると、データがすぐに失われることはありません。
  • オブジェクトにデータを書き込み、ファイルとして保存し、データが必要なときにオブジェクトを読み取ります。
  • 共有設定にオブジェクトを書き込みます。

Gsonライブラリを使用して配列またはオブジェクトをJsonに変換し、データをString形式でjson形式で保存します。

保存します。

SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context); 
Editor editor = sharedPrefs.edit(); 
Gson gson = new Gson(); 

String json = gson.toJson(arrayList); 

editor.putString(TAG, json); 
editor.commit(); 

読み取り;

SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context); 
Gson gson = new Gson(); 
String json = sharedPrefs.getString(TAG, null); 
Type type = new TypeToken<ArrayList<ArrayObject>>() {}.getType(); 
ArrayList<ArrayObject> arrayList = gson.fromJson(json, type); 

エラーを回避するために、import java.lang.reflect.Typeを使用してください。

+0

上記のコードでコンテキストが何を参照しているのですか?また、私が上にあるコードでそれを使用するにはどうすればいいですか? – Meghana

+0

Gson error..I依存関係を追加しました – Meghana

+0

私は立ち往生しています。 – Meghana

0

これを参照してください。

ストア

public void storeData(Context context,List<Contact> offlineData){ 

     SharedPreferences preferences=context.getSharedPreferences("contact_prefs",Context.MODE_PRIVATE); 
     SharedPreferences.Editor editor = preferences.edit(); 

     Gson gson=new Gson(); 
     editor.putString("data",gson.toJson(offlineData)); 
     editor.apply(); 
    } 

読む

public List<Contact> getData(Context context){ 
     SharedPreferences preferences=context.getSharedPreferences("contact_prefs",Context.MODE_PRIVATE); 
     Gson gson = new Gson(); 
     return gson.fromJson(preferences.getString("data",null), new TypeToken<List<Photo>>() { 
     }.getType()); 

    } 
0

ランジットKPの答えは素晴らしいです。

コンテキストの
compile 'com.google.code.gson:gson:2.8.0' 

uはウル活動を渡すことができます(単に「本」の代わりに使用してください):dependecyを追加することを忘れていけません。

タグ - 単なる文字列thatsの、あなたの活動のメンバーに

String TAG = "tag"; 

を追加します。

SharedPreferences sharedPreference = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE); 
Editor editor = sharedPreference.edit(); 
editor.putString(key, value); 
editor.apply(); 

文脈:共有好みにキー値ペアを保存する

0

呼び出しコンテキストまたはベースコンテキストまたはアプリケーション・コンテキストを渡す(のgetContext()断片で又はgetBaseContext()活性の)

関連する問題