2016-09-11 3 views
1

Когда я отправляю (метод POST) мой идентификатор и пароль в мой 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. Я узнал, что запрос идет хорошо.

Вопрос Как я могу сэкономить 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 роект в ответ, как этот

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


ИЛИ

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 может использоваться для сериализации и десериализации объектов Java в (и из) JSON. Класс 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 Шерпа, но если 'значение String =«ef91707f0434a1a2a7581dd3f4f48d3bdad717»;' не фиксирован, то есть значение String = "123123"; или String value = "efwwewewe" в зависимости от идентификатора входа и пароля могут быть изменены. Я действительно хочу спросить вас, как я могу установить эту часть: 'String value =" ef91707f0434a1a2a7581dd3f4f48d3bdad717 ";'. –

+0

откуда это значение идет? вы можете присвоить значение 'value' как' String value = getValueAccordingToLogInIdAndPassword(); ' , но вы должны реализовать метод' String getValueAccordingToLogInIdAndPassword() {} 'самостоятельно. –

+0

um .. i означает, что значение исходит от сервера rest api.это форма '{ " ключ ":" ef91707f0434a1a2a7581dd3f4f48d3bdad717 " }'. Сначала я POST мой json на теле HTTP, например '{" id ":" id_is_this "," password ":" password_is_it "}', а затем ответ такой как '{ " key ":" ef91707f0434a1a2a7581dd3f4f48d3bdad717 " }'. Я хочу этот ответ. Извините, что беспокоило вас –

Смежные вопросы