Java 如何将改装2响应保存到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

我有一个改造2响应,通过它我可以从服务器获取数据。我的代码运行良好

但我希望使用SharedReferences缓存此响应,并将其保留到活动运行和活动销毁之后。我想从SharedReferences中删除此响应

这是我的代码:

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(响应,上下文);