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

问题描述 投票:0回答:4

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

可以使用静态变量吗?

android sharedpreferences
4个回答
0
投票

您还可以序列化数组以将数组保存为首选项中的字符串,但请记住,如果它很大,请使用Sqllite ...

或者您可以使用具有离线功能的firebase。


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

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

祝好运!


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上。


-1
投票

如果需要,可以将数据存储在本地数据库中。这样,如果你有一天获得大量数据,你将不会遇到麻烦。

您可以使用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

© www.soinside.com 2019 - 2024. All rights reserved.