Java 如何使用SharedReference存储一组ArrayList值

Java 如何使用SharedReference存储一组ArrayList值,java,android,Java,Android,下面的代码检索多个选定的联系人并以ArrayList的形式存储,但一旦我关闭应用程序并打开选定的联系人列表,则该列表将被删除,因此应存储数据,以便一旦我关闭并打开应用程序,该数据将一直保留,直到数据被删除。任何人都可以帮助我使用共享首选项存储ArrayList值 private void chooseContact() { Intent intentContactPick = new Intent(MainActivity.this,ContactsPickerActivity.cla

下面的代码检索多个选定的联系人并以ArrayList的形式存储,但一旦我关闭应用程序并打开选定的联系人列表,则该列表将被删除,因此应存储数据,以便一旦我关闭并打开应用程序,该数据将一直保留,直到数据被删除。任何人都可以帮助我使用共享首选项存储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);

    }

}
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();