在我的应用程序中,我需要一些我不想每次从服务器请求的数据。该dat包括userId和一些数组字符串。我想我可以将用户ID存储在SharedPreferences
中,但是数组怎么样?
可以使用静态变量吗?
您还可以序列化数组以将数组保存为首选项中的字符串,但请记住,如果它很大,请使用Sqllite ...
或者您可以使用具有离线功能的firebase。
您可以使用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();
function:convertArrayToString
private String convertArrayToString(ArrayList<String> yourArray){
Gson gson = new Gson();
return gson.toJson(yourArray);
}
从共享首选项中读取String时,函数convertStringToArray
private ArrayList<String> convertStringToArray(String yourArrayStr){
Gson gson = new Gson();
return gson.fromJson(yourArrayStr , new TypeToken<ArrayList<String>>(){}.getType());
}
祝好运!
首先创建一个类模型。像这样
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上。
如果需要,可以将数据存储在本地数据库中。这样,如果你有一天获得大量数据,你将不会遇到麻烦。
您可以使用Room,它是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.
}
user DAO.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