无法使用Sharedpreferences保存服务器的响应

时间:2016-07-29 12:58:44

标签: android image sharedpreferences

我需要使用从服务器响应中获取的字符串变量。 我尝试使用共享首选项保存,或者只是注销,但我不能。

它处于相同的活动中,但我也尝试在另一项活动中展示它。

问题在于保存过程。

 String content_url="";

 public void onResponse(JSONObject response) {

     try {

          Log.i("dataJson", response.toString());
              for (int i = 0; i < response.length(); i++) {
                 JSONObject jresponse = response.getJSONObject("dataJson");
                      String media_id = jresponse.getString("media_id");
                      String session_id = jresponse.getString("session_id");
                      String content_url = jresponse.getString("content_url");

                      Log.i("dataJson", media_id);
                      Log.i("dataJson", session_id);
                      Log.i("dataJson", content_url);

                        }

 SharedPreferences sharedPref = getSharedPreferences("server", Context.MODE_PRIVATE);

 SharedPreferences.Editor editor = sharedPref.edit();
 editor.putString("content_url", content_url);
 editor.apply();


                    } catch (JSONException e) {
                        e.printStackTrace();
                    }

用于检索:

  SharedPreferences sharedPref =getSharedPreferences("server", Context.MODE_PRIVATE);

  String content_url1 =sharedPref.getString("content_url", "");
  Log.i("dataJson", "Content: " + content_url1);

日志结果:07-29 14:55:30.362 11522-11522 /? I / dataJson:内容:

我试图在其他地方放置sharedpref部分,但结果是相同的.. =没有。

我做错了什么?

来自服务器的complett响应:

 07-29 15:21:40.442 13585-13585/? I/dataJson: {"media_id":2104,"session_id":"14697845603416","content_url":"http:\/\/developlment.dev.tech.com\/upload\/2104\/content"}

2 个答案:

答案 0 :(得分:0)

  

已使用

 editor.commit();
  

而不是

 editor.apply();
  

注意:将您的共享偏好设置为for循环

   for (int i = 0; i < response.length(); i++) {
             JSONObject jresponse = response.getJSONObject("dataJson");
                  String media_id = jresponse.getString("media_id");
                  String session_id = jresponse.getString("session_id");
                  String content_url = jresponse.getString("content_url");

                  Log.i("dataJson", media_id);
                  Log.i("dataJson", session_id);
                  Log.i("dataJson", content_url);


          SharedPreferences sharedPref = getSharedPreferences("server", Context.MODE_PRIVATE);

          SharedPreferences.Editor editor = sharedPref.edit();
          editor.putString("content_url", content_url);
          editor.commit();

                    }

答案 1 :(得分:0)

String content_url = jresponse.getString("content_url");更改为content_url = jresponse.getString("content_url");

您正在for循环内重新声明相同的变量,因此您的初始变量仍为空白。您需要使用您获得的数据更新初始变量。

此外,将editor.apply();更改为editor.commit();并在保存到SharedPreferences之前记录content_url的结果。

修改

用此代替您的代码。您只需要从响应中检索数据。因为您已经知道JSONObject中的键,所以不需要for循环。

public void onResponse(JSONObject response) {
    try {
        Log.i("dataJson", response.toString());
        String media_id = response.getString("media_id");
        String session_id = response.getString("session_id");
        String content_url = response.getString("content_url");

        Log.i("dataJson", media_id);
        Log.i("dataJson", session_id);
        Log.i("dataJson", content_url);

        SharedPreferences sharedPref = getSharedPreferences("server", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPref.edit();
        editor.putString("content_url", content_url).commit();

    } catch (JSONException e) {
        e.printStackTrace();
}