如何在Android应用中缓存数据?

时间:2018-03-02 16:37:02

标签: android sharedpreferences

在我的应用中,我需要一些我不希望每次都从服务器请求的数据。 该dat包括userId和一些数组字符串。 我想我可以将用户ID存储在SharedPreferences中, 但阵列怎么样?

使用静态变量是否可以?

4 个答案:

答案 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

相关问题