2016-09-11 134 views
1

当我后(POST方法)我的ID和密码进入我的REST API,它retrured使用Retrofit如何处理这个json响应表单?

{ 
    "key": "ef91707f0434a1a2a7581dd3f4f48d3bdad717" 
} 

我想拯救这个ef91707f0434a1a2a7581dd3f4f48d3bdad717我Sharedpreference。

ReferSharedPreference.java(这是用于容易地使用对象sharedpreference)

public class ReferSharedPreference { 

    public final static String REF_LOGIN_KEY = "REF_LOGIN_KEY"; 

    static Context mContext; 

    public ReferSharedPreference(Context c) { 
     mContext = c; 
    } 

    public void put(String key, String value) { 
     SharedPreferences pref = mContext.getSharedPreferences(REF_PREF_NAME, 
       Activity.MODE_PRIVATE); 
     SharedPreferences.Editor editor = pref.edit(); 
     editor.putString(key, value); 
     editor.commit(); 
    public String getValue(String key, String dftValue) { 
     SharedPreferences pref = mContext.getSharedPreferences(REF_PREF_NAME, 
       Activity.MODE_PRIVATE); 
     try { 
      return pref.getString(key, dftValue); 
     } catch (Exception e) { 
      return dftValue; 
     } 
    } 

LoginActivity.java

 Call<ResponseBody> getkey = loginApiService.getkey(loginData); 
     getkey.enqueue(new Callback<ResponseBody>() { 
      @Override 
      public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) { 
       if(response.code() == 200) { 
        ReferSharedPreference ref_key = new ReferSharedPreference(getApplicationContext()); 
        ref_key.put(ReferSharedPreference.REF_LOGIN_KEY, response.body().toString()); 
        Toast.makeText(getApplicationContext(), response.body().toString(), Toast.LENGTH_LONG); 
        Toast.makeText(getApplicationContext(), ref_key.getValue(ReferSharedPreference.REF_LOGIN_KEY, "default").toString(), Toast.LENGTH_SHORT); 
        } 
      } 

      @Override 
      public void onFailure(Call<ResponseBody> call, Throwable t) { 
      } 

在上述码(LoginActivity.java)

   Toast.makeText(getApplicationContext(), response.body().toString(), Toast.LENGTH_LONG); 
       Toast.makeText(getApplicationContext(), ref_key.getValue(ReferSharedPreference.REF_LOGIN_KEY, "default").toString(), Toast.LENGTH_SHORT); 

不要工作。即使我的腻子说HTTP/1.1" 200 50。我知道这意味着请求进展顺利。

问题 如何在我的sharedpreference上保存ef91707f0434a1a2a7581dd3f4f48d3bdad717? 正是我想要保存它像Token ef91707f0434a1a2a7581dd3f4f48d3bdad717

回答

2

您可以实现的方法来保存和SharedPreferences加载字符串值是这样的:

String key = "Token"; 
String value = "ef91707f0434a1a2a7581dd3f4f48d3bdad717"; 
//saving your key 
sSavePreferences(getApplicationContext(), key, value); 

//accessing your key 
String mKey = sLoadSavedPreferencesString(getApplicationContext, key); 

方法sSavePreferences(Context context, String key, String value)

public static void sSavePreferences(Context context, String key, String value) { 
     SharedPreferences sharedPreferences = PreferenceManager 
       .getDefaultSharedPreferences(context); 
     SharedPreferences.Editor editor = sharedPreferences.edit(); 
     editor.putString(key, value); 
     editor.commit(); 
    } 

方法String sLoadSavedPreferencesString(Context context, String key)

public static String sLoadSavedPreferencesString(Context context, String key) { 
     SharedPreferences sharedPreferences = PreferenceManager 
       .getDefaultSharedPreferences(context); 

     String value = sharedPreferences.getString(key, "No Name Found"); 
     return value; 
    } 

UPDATE: 你可以得到价值,你得到了JSON Oject作为响应,这样

String value; try { value = response.getString("key"); } catch (JSONException e) { e.printStackTrace(); }


OR

class MyKey { 
     String key; 
    } 
... 

Call<ResponseBody> getkey = loginApiService.getkey(loginData); 
    getkey.enqueue(new Callback<ResponseBody>() 
    { 
     @Override 
     public void onResponse (Call <ResponseBody> call, Response <ResponseBody> response){ 
      if (response.code() == 200) { 
       ReferSharedPreference ref_key = new ReferSharedPreference(getApplicationContext()); 
       ref_key.put(ReferSharedPreference.REF_LOGIN_KEY, response.body().toString()); 

       String jsonString = response.body().toString(); 
       Gson gson = new Gson(); 
       Key result = gson.fromJson(jsonString, MyKey.class); 
       Toast.makeText(getApplicationContext(), result.key, Toast.LENGTH_LONG); 

       Toast.makeText(getApplicationContext(), ref_key.getValue(ReferSharedPreference.REF_LOGIN_KEY, "default").toString(), Toast.LENGTH_SHORT); 
      } 
     } 

     @Override 
     public void onFailure (Call <ResponseBody> call, Throwable t){ 
     } 

    } 

在上面的代码GSON使用。 GSON可用于序列化和反序列化JSON的Java对象。类的myKey使用哪个对象序列化和GSON反序列化,这样做你的问题应该得到解决

String jsonString = response.body().toString(); 
      Gson gson = new Gson(); 
      Key result = gson.fromJson(jsonString, MyKey.class); 
      Toast.makeText(getApplicationContext(), result.key, Toast.LENGTH_LONG); 
+0

谢谢Ngima夏尔巴人,但如果'字符串值=“ef91707f0434a1a2a7581dd3f4f48d3bdad717”;'是不固定的,即字符串值= “123123”;或字符串值=“efwwewewe”取决于登录ID和密码值可能会改变。我真正想问你的是如何设置这个部分:'String value =“ef91707f0434a1a2a7581dd3f4f48d3bdad717”;'。 –

+0

从哪里来的价值? 您可以像'String value = getValueAccordingToLogInIdAndPassword();' 那样为'value'赋值,但是您必须自己实现'String getValueAccordingToLogInIdAndPassword(){}'方法。 –

+0

恩..我的意思是价值来自服务器休息API。它的形式是'钥匙':“ef91707f0434a1a2a7581dd3f4f48d3bdad717” }'。首先,我在HTTP身上发布我的json,例如'{“id”:“id_is_this”,“password”:“password_is_it”}',然后响应例如'{ef91707f0434a1a2a7581dd3f4f48d3bdad717'' }''。我想要这个回应。对不起,打扰你 –