Java 如何使用SharedReference存储一组ArrayList值
下面的代码检索多个选定的联系人并以ArrayList的形式存储,但一旦我关闭应用程序并打开选定的联系人列表,则该列表将被删除,因此应存储数据,以便一旦我关闭并打开应用程序,该数据将一直保留,直到数据被删除。任何人都可以帮助我使用共享首选项存储ArrayList值Java 如何使用SharedReference存储一组ArrayList值,java,android,Java,Android,下面的代码检索多个选定的联系人并以ArrayList的形式存储,但一旦我关闭应用程序并打开选定的联系人列表,则该列表将被删除,因此应存储数据,以便一旦我关闭并打开应用程序,该数据将一直保留,直到数据被删除。任何人都可以帮助我使用共享首选项存储ArrayList值 private void chooseContact() { Intent intentContactPick = new Intent(MainActivity.this,ContactsPickerActivity.cla
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);
}
}
private void chooseContact(){
Intent intentContactPick=新的Intent(MainActivity.this、contactsPickActivity.class);
MainActivity.this.startActivityForResult(意向联系人选择、联系人选择请求);
}
@凌驾
ActivityResult上的公共void(int请求代码、int结果代码、意图数据){
super.onActivityResult(请求代码、结果代码、数据);
如果(requestCode==联系\u选择\u请求和&resultCode==结果\u确定){
ArrayList selectedContacts=data.getParcelableArrayListExtra(“selectedContacts”);
字符串显示=”;
对于(int i=0;i您有不同的选择
- 使用服务并在后台运行,以便在关闭时不会丢失数据
- 将数据写入对象并将其另存为文件,并在需要数据时读取对象
- 将对象写入共享首选项
使用Gson库将数组或对象转换为Json,并将数据存储为Json格式的字符串
保存
阅读
SharedReferences SharedReferences=PreferenceManager.GetDefaultSharedReferences(上下文);
Gson Gson=新的Gson();
String json=sharedPrefs.getString(标记,null);
Type Type=new-TypeToken(){}.getType();
ArrayList ArrayList=gson.fromJson(json,类型);
使用import java.lang.reflect.Type避免错误。请参见此。
商店
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();
}
publicsvoidstoredata(上下文、离线数据列表){
SharedReferences首选项=context.getSharedReferences(“contact\u prefs”,context.MODE\u PRIVATE);
SharedReferences.Editor=首选项.edit();
Gson Gson=新的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());
}
public List getData(上下文){
SharedReferences首选项=context.getSharedReferences(“contact\u prefs”,context.MODE\u PRIVATE);
Gson Gson=新的Gson();
返回gson.fromJson(preferences.getString(“data”,null),new-TypeToken(){
}.getType());
}
Ranjith KP答案很好。别忘了添加依赖项:
compile 'com.google.code.gson:gson:2.8.0'
对于上下文,您可以传递您的活动(只需使用“this”即可)。
标记-这只是一个字符串,添加
String TAG = "tag";
在活动的成员上。要将键值对保存到共享首选项,请执行以下操作:
SharedPreferences sharedPreference = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
Editor editor = sharedPreference.edit();
editor.putString(key, value);
editor.apply();
上下文:传递调用上下文或基本上下文或应用程序上下文(getContext()在片段中或getBaseContext()在活动中)您只能在SharedReferences中存储基本数据类型…但您可以使用Gson Library将ArrayList存储在SharedReferences中使用数据库来存储数据,而不是SharedReferences可能与上面代码中上下文引用的内容重复,我应该如何在上面的代码中使用它,因为我遇到了很多错误。
compile 'com.google.code.gson:gson:2.8.0'
String TAG = "tag";
SharedPreferences sharedPreference = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
Editor editor = sharedPreference.edit();
editor.putString(key, value);
editor.apply();