在我的应用中,我需要一些我不希望每次都从服务器请求的数据。
该dat包括userId和一些数组字符串。
我想我可以将用户ID存储在SharedPreferences
中,
但阵列怎么样?
使用静态变量是否可以?
答案 0 :(得分:0)
您可以使用Gson解析数组到字符串并保存到共享首选项。 从共享首选项中读取String时,可以使用Gson将String转换为Array。 Gson library
ArrayList<String> yourArrayStr = convertArrayToString(yourArray);
SharedPreferences prefs = context.getSharedPreferences("PREFERENCE_NAME",
Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putString("array_key_name", yourArrayStr);
editor.apply();
功能: convertArrayToString
private String convertArrayToString(ArrayList<String> yourArray){
Gson gson = new Gson();
return gson.toJson(yourArray);
}
从共享首选项中读取字符串时函数 convertStringToArray
private ArrayList<String> convertStringToArray(String yourArrayStr){
Gson gson = new Gson();
return gson.fromJson(yourArrayStr , new TypeToken<ArrayList<String>>(){}.getType());
}
祝你好运!
答案 1 :(得分:0)
您还可以序列化数组以将数组保存为首选项中的字符串,但请记住,如果它很大,请使用Sqllite ...
或者您可以将firebase用于离线功能。
答案 2 :(得分:0)
首先创建一个类模型。像这样
public class User implements Serializable {
@SerializedName("id")
private int id;
@SerializedName("array")
private ArrayList<String> array;
//your get/set are here too
}
我使用gson让我的生活更轻松。
与您的服务器响应相比,将Json保存在您的SharedPreference
上SharedPreferencesUtils.write(Constants.Preferences.Keys.USER_DATA, userJson);
最后,每当您需要阅读此信息时,请使用
String json = SharedPreferencesUtils.read(Constants.Preferences.Keys.USER_DATA, null);
User user = new Gson().fromJson(json, User.class);
我会在你的单身人士身上加载这些信息,以便在应用程序中的任何地方使用它:)
如果您需要更新它...只需获取响应并再次保存在您的SharedPreference上。
答案 3 :(得分:-1)
如果需要,您可以将数据存储在本地数据库中。 这样,如果你有一天获得大量数据,你就不会遇到麻烦。
您可以使用会议室,它是 SQLite 的抽象层,使用起来非常简单。你只需要一个实体,一个dao和一个数据库类。
您可以这样实现:
User.java
@Entity
public class User {
@PrimaryKey
private int id;
@ColumnInfo(name = "first_name")
private String firstName;
@ColumnInfo(name = "last_name")
private String lastName;
// Getters and setters are ignored for brevity,
// but they're required for Room to work.
}
UserDao.java
@Dao
public interface UserDao {
@Query("SELECT * FROM user")
List<User> getAll();
@Insert
void insert(User user);
@Update
void update(User user);
@Delete
void delete(User user);
}
Database.java
@Database(entities = {User.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
public abstract UserDao userDao();
}
最后在您的应用程序中,您可以通过这种方式实例化数据库:
AppDatabase db = Room.databaseBuilder(getApplicationContext(),
AppDatabase.class, "database-name").build();
有关房间数据库的更多信息,请查看Android指南:https://developer.android.com/training/data-storage/room/index.html