我想将我的服务器响应存储为共享首选项中的字符串,以便稍后可以使用此响应而无需从服务器获取。但是当我将数据保存在共享首选项中以后我使用时我会错过整个响应。我没有安全问题和任何其他原因,如卸载应用程序等。我的问题是响应是否会在共享首选项中丢失,以便响应包含多个JSONObject和JSONArray。
private void productListApi(String url){
final ProgressDialog pDialog = new ProgressDialog(mContext);
pDialog.setMessage(mContext.getResources().getString(R.string.loading_message));
pDialog.show();
System.out.println("product list urlllllllllllllllllllll:" + url);
RequestQueue mRequestQueue = Volley.newRequestQueue(mContext.getApplicationContext());
StringRequest postRequest = new StringRequest(Request.Method.POST, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
System.out.println("response of product list data is:"
+ response);
apiResponse = response ;
pDialog.dismiss();
try {
JSONObject json = new JSONObject(response);
if (json.has("code")) {
if (code.equalsIgnoreCase("200")) {
//set response to shared preference
SharedPreference.setStringValue(mContext, SharedPreference.PRODUCT_LIST_RESPONSE, response);
parseData(SharedPreference.getStringValue(mContext,SharedPreference.PRODUCT_LIST_RESPONSE));
}else {
UserDialog
.showUserAlert(mContext,
mContext.getResources().getString(R.string.product_list_failed));
}
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
pDialog.dismiss();
UserDialog.showUserAlert(mContext,
mContext.getResources().getString(R.string.no_response));
}
}) {
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<>();
// the POST parameters:
params.put("user_id", SharedPreference.getStringValue(getActivity(), SharedPreference.USER_ID));
params.put("temp_user_id", SharedPreference.getStringValue(getActivity(), SharedPreference.TEMP_USER_ID));
params.put("version", Utilities.getVersionCode(mContext));
params.put("device_token", SharedPreference.getStringValue(getActivity(), SharedPreference.DEVICE_TOKEN));
return params;
}
};
int socketTimeout = Constant.socketTimeout
;//30 seconds - change to what you want
RetryPolicy policy = new DefaultRetryPolicy(socketTimeout, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
//RetryPolicy policy = new DefaultRetryPolicy(socketTimeout, 0, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
postRequest.setRetryPolicy(policy);
mRequestQueue.add(postRequest);
}
public class SharedPreference {
SharedPreferences preferences;
SharedPreferences.Editor editor;
private static final String PREFS_NAME = "nevada_food";
public static final String PRODUCT_LIST_RESPONSE = "product_list" ;
public SharedPreference() {
super();
// TODO Auto-generated constructor stub
}
public static String getStringValue(final Context context, String key) {
return context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
.getString(key, "");
}
public static void setStringValue(final Context context, String key,
String value) {
final SharedPreferences prefs = context.getSharedPreferences(
PREFS_NAME, Context.MODE_PRIVATE);
final SharedPreferences.Editor editor = prefs.edit();
editor.putString(key, value);
editor.commit();
}
}
这是我的服务器响应。我将其保存在共享首选项中,并在共享首选项中解析UI中的数据。这种方法
parseData(SharedPreference.getStringValue(mContext,SharedPreference.PRODUCT_LIST_RESPONSE));
直接从服务器第一次正常工作,但是当我们在另一个方法中使用此方法时,它不起作用。
答案 0 :(得分:0)
我的问题是响应是否会在共享首选项中丢失
共享偏好不会被删除/丢失,除非:
因此,您可以安全地存储必要的数据。
答案 1 :(得分:0)
存储在SharedPreference
中的数据不会丢失,除非:
根据具体情况,您可以选择以下方法来保存/缓存您的json数据/响应:
SharedPreference
使用起来更方便。如果json很大,每次你可以创建Sqlite
数据库或者可以选择ORMLite,GreeDao等ORM工具时,与调用服务器有关的权衡。
缓存库可用于缓存服务器响应。
答案 2 :(得分:0)
您使用错误的方式保存到SharedPreference。
您的密码:
//set response to shared preference
SharedPreference.setStringValue(mContext, SharedPreference.PRODUCT_LIST_RESPONSE, response);
parseData(SharedPreference.getStringValue(mContext,SharedPreference.PRODUCT_LIST_RESPONSE));
我不知道你在这里写的是什么。试试我的解决方案。
您必须遵循简单的SharedPreference格式,然后是编辑器。
只需保存您的数据,如下所示:
SharedPreferences.Editor editor = getSharedPreferences("PREFS_NAME", 0).edit();
editor.putString("PRODUCT_LIST_RESPONSE", response);
editor.commit();
通过 KEY ( PRODUCT_LIST_RESPONSE 此处)获取
SharedPreferences prefs = getSharedPreferences("PREFS_NAME", 0);
String response = prefs.getString("PRODUCT_LIST_RESPONSE", any_default_Value);