我需要使用从服务器响应中获取的字符串变量。 我尝试使用共享首选项保存,或者只是注销,但我不能。
它处于相同的活动中,但我也尝试在另一项活动中展示它。
问题在于保存过程。
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"}
答案 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();
}