【问题标题】:Store Arraylist in SharedPreferences with Gson使用 Gson 将 Arraylist 存储在 SharedPreferences 中
【发布时间】:2020-08-30 20:33:41
【问题描述】:

我是 Java 和 Android 开发的新手。我有一个包含性别、电话号码、姓名和爱好数组的数据库。我想用 SharedPreferences 存储在我的活动中,但我不知道如何应用 Gson 类。这是我的代码:

public class SessionManager {

SharedPreferences usersSession;
SharedPreferences.Editor editor;
Context context;

public static final String IS_LOGIN = "IsLoggedIn";

public static final String KEY_NAME = "name";
public static final String KEY_BIRTHDATE = "birthdate";
public static final String KEY_GENDER = "gender";
public static final String KEY_PHONE = "phone";
public static final ArrayList<String> KEY_HOBBIES = new ArrayList<>();

public SessionManager(Context _context) {
    context = _context;
    usersSession = _context.getSharedPreferences("userLoginSession", Context.MODE_PRIVATE);
    editor = usersSession.edit();
    Gson gson = new Gson();
    String json = gson.toJson(KEY_HOBBIES);
}

public void createLoginSession(String name, String birthdate, String gender, String phone, ArrayList<String> hobbies) {

    editor.putBoolean(IS_LOGIN, true);

    Gson gson = new Gson();
    String json = gson.toJson(KEY_HOBBIES);

    editor.putString(KEY_NAME, name);
    editor.putString(KEY_BIRTHDATE, birthdate);
    editor.putString(KEY_GENDER, gender);
    editor.putString(KEY_PHONE, phone);
    editor.putString(KEY_HOBBIES, json);

    editor.commit();

}

我在这段代码中犯了 2-3 个错误,如何将这个 Arraylist 与其他字符串值一起存储。谢谢

【问题讨论】:

    标签: java android arraylist


    【解决方案1】:

    存储数组列表

     StringBuilder sb = new StringBuilder();
            for (int i = 0; i < hobbies.size; i++) {
                sb.append(hobbies.get(i)).append(",");
            }
            editor.putString(KEY_HOBBIES, sb.toString());
    

    检索它

        String[] array = playlist.split(",");
    
        hobbies = new ArrayList<>(Arrays.asList(array));
    

    【讨论】:

      【解决方案2】:

      您可以使用 TYPE 从 sharedPreferences 中读取数据

      读取数据

                 Gson gson = new Gson();
                  String json = sharedPreferences.getString("Set", "");
                     Type type = new TypeToken<List<String>>() {
                  }.getType();
                  List<String> arrPackageData = gson.fromJson(json, type);
                  for(String data:arrPackageData) {
                     result.setText(data);
                  }
            
      

      保存数据

              final ArrayList<String> arrPackage;
              String nameS = name.getText().toString().trim();
              String birhtdayS = birthday.getText().toString().trim();
              String gendarS = gendar.getText().toString().trim();
              String phoneS = phone.getText().toString().trim();
              arrPackage.add(nameS);
              arrPackage.add(birhtdayS);
              arrPackage.add(gendarS);
              arrPackage.add(phoneS);
              Gson gson = new Gson();
              String json = gson.toJson(arrPackage);
              SharedPreferences.Editor editor = sharedPreferences.edit();
              editor.putString("Set",json );
              editor.commit();
           }
        
      

      【讨论】:

      • 谢谢,但我想用 gson 存储我的爱好数组。我已经存储了其他字符串值,但我无法存储爱好数组。
      猜你喜欢
      • 2015-02-13
      • 2013-09-11
      • 2017-03-19
      • 2018-06-13
      • 2016-01-07
      • 2015-02-22
      • 1970-01-01
      • 2018-09-16
      • 2022-09-27
      相关资源
      最近更新 更多