Java 如何将改装2响应保存到SharedReferences中
我有一个改造2响应,通过它我可以从服务器获取数据。我的代码运行良好 但我希望使用SharedReferences缓存此响应,并将其保留到活动运行和活动销毁之后。我想从SharedReferences中删除此响应 这是我的代码:Java 如何将改装2响应保存到SharedReferences中,java,android,json,retrofit2,Java,Android,Json,Retrofit2,我有一个改造2响应,通过它我可以从服务器获取数据。我的代码运行良好 但我希望使用SharedReferences缓存此响应,并将其保留到活动运行和活动销毁之后。我想从SharedReferences中删除此响应 这是我的代码: public class SampleClass { private DataInterface mListener; public SampleClass() { super(); } public void getDataForId(final Strin
public class SampleClass {
private DataInterface mListener;
public SampleClass() {
super();
}
public void getDataForId(final String id) {
ApiInterface apiInterface = APIClient.getApiInterface();
Call<MyResponse> call = apiInterface.getResponse();
call.enqueue(new Callback<MyResponse>() {
@Override
public void onResponse(Call<MyResponse> call, Response<MyResponse> response) {
if (response!=null && response.body() != null && mListener != null) {
mListener.responseData(response.body());
}
}
@Override
public void onFailure(Call<MyResponse> call, Throwable t) {
}
});
}
public void setOnDataListener(DataInterface listener) {
mListener = listener;
}
public interface DataInterface {
void responseData( MyResponse myResponse );
}
}
AppController类
public class AppControler extends Application {
private static AppControler instance;
@Override
public void onCreate()
{
super.onCreate();
instance = this;
if (BuildConfig.DEBUG)
{
Timber.plant(new Timber.DebugTree());
}
Timber.i("Creating our Application");
}
public static AppControler getInstance ()
{
return instance;
}
public static boolean hasNetwork ()
{
return instance.checkIfHasNetwork();
}
public boolean checkIfHasNetwork()
{
ConnectivityManager cm = (ConnectivityManager) getSystemService( Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = cm.getActiveNetworkInfo();
return networkInfo != null && networkInfo.isConnected();
}
您可以使用ObjectMapper或Gson 对于ObjectMapper,您可以参考以下代码
public static void updateUserInfo(UserInfo userInfo, Context context) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
Crashlytics.log("updating User Info "+(userInfo!=null?userInfo.toString():"UserInfo is null"));
final SharedPreferences.Editor edit = preferences.edit();
ObjectMapper objectMapper = new ObjectMapper();
try {
String value = objectMapper.writeValueAsString(userInfo);
edit.putString("USER_INFO_MODEL", value);
edit.commit();
} catch (JsonProcessingException e) {
Exceptions.propagate(e);
}
}
您还可以从共享首选项获取存储的响应
public static UserInfo getUserInfo(Context context) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
String userDetatails = preferences.getString(AppConstants.USER_INFO_MODEL, "");
Crashlytics.log("get UserInfo "+userDetatails);
ObjectMapper mapper = new ObjectMapper();
if (StringUtils.isEmpty(userDetatails)) {
return null;
}
UserInfo userInfo = null;
try {
userInfo = mapper.readValue(userDetatails, UserInfo.class);
} catch (IOException e) {
Exceptions.propagate(e);
}
return userInfo;
}
您可以使用ObjectMapper或Gson 对于ObjectMapper,您可以参考以下代码
public static void updateUserInfo(UserInfo userInfo, Context context) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
Crashlytics.log("updating User Info "+(userInfo!=null?userInfo.toString():"UserInfo is null"));
final SharedPreferences.Editor edit = preferences.edit();
ObjectMapper objectMapper = new ObjectMapper();
try {
String value = objectMapper.writeValueAsString(userInfo);
edit.putString("USER_INFO_MODEL", value);
edit.commit();
} catch (JsonProcessingException e) {
Exceptions.propagate(e);
}
}
您还可以从共享首选项获取存储的响应
public static UserInfo getUserInfo(Context context) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
String userDetatails = preferences.getString(AppConstants.USER_INFO_MODEL, "");
Crashlytics.log("get UserInfo "+userDetatails);
ObjectMapper mapper = new ObjectMapper();
if (StringUtils.isEmpty(userDetatails)) {
return null;
}
UserInfo userInfo = null;
try {
userInfo = mapper.readValue(userDetatails, UserInfo.class);
} catch (IOException e) {
Exceptions.propagate(e);
}
return userInfo;
}
当响应成功时,在改装响应中添加以下代码 首先将JSON转换为字符串并存储
Gson gson = new Gson();
String favData = gson.toJson(response.body());
将字符串保存到prefrance
preferenceManager是我的SharedPref类
现在,当您想要获取pref数据时,请调用下面的方法
public ArrayList<MyResponse> getData(String key) {
String data = getStringPreference(key);
Gson gson = new Gson();
Type type = new TypeToken<ArrayList<MyResponse>>() {
}.getType();
return gson.fromJson(data, type);
}
public ArrayList getData(字符串键){
字符串数据=getStringPreference(键);
Gson Gson=新的Gson();
Type Type=new-TypeToken(){
}.getType();
返回gson.fromJson(数据,类型);
}
当响应成功时,在改装响应中添加以下代码
首先将JSON转换为字符串并存储
Gson gson = new Gson();
String favData = gson.toJson(response.body());
将字符串保存到prefrance
preferenceManager是我的SharedPref类
现在,当您想要获取pref数据时,请调用下面的方法
public ArrayList<MyResponse> getData(String key) {
String data = getStringPreference(key);
Gson gson = new Gson();
Type type = new TypeToken<ArrayList<MyResponse>>() {
}.getType();
return gson.fromJson(data, type);
}
public ArrayList getData(字符串键){
字符串数据=getStringPreference(键);
Gson Gson=新的Gson();
Type Type=new-TypeToken(){
}.getType();
返回gson.fromJson(数据,类型);
}
这个答案可能会帮助你缓存你的响应。顺便说一下,在SharedRef中缓存响应不是一个好主意。他们厌倦了这个代码,但我在这里遇到了这个错误。实例可能没有初始化,这就是为什么它会出现NullPointerException嘿,兄弟,你能告诉我任何解决方案吗?请上传整个改装或okhttp该文件中的代码至少这个答案可能有助于缓存您的响应。顺便说一句,在SharedRef中缓存响应不是一个好主意。他们厌倦了该代码,但我在这里遇到了这个错误。实例可能未初始化,这就是为什么它会给出NullPointerException嘿,兄弟,你能告诉我任何解决方案吗?请上传整个文件该文件中的改装或okhttp代码至少在哪里传递改装响应?在这段代码中,只需使用响应和上下文类名调用该方法,其中该方法可用CommonUtil.updateUserInfo(响应,上下文);我应该在哪里传递改装响应?在这段代码中,只需使用响应和上下文类名调用该方法,其中该方法可用CommonUtil.updateUserInfo(响应,上下文);