2016-09-11 2 views
1

Wenn i (POST-Methode) meine ID und Passwort in meinem REST api posten, retrured esVerwenden von Retrofit Wie behandelt man dieses JSON-Antwortformular?

{ 
    "key": "ef91707f0434a1a2a7581dd3f4f48d3bdad717" 
} 

ich diesen ef91707f0434a1a2a7581dd3f4f48d3bdad717 auf meine Sharedpreference speichern möchten.

ReferSharedPreference.java (es ist für leicht sharedpreference-Objekt)

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) { 
      } 

In obigen Codes (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); 

Nicht arbeiten. Obwohl mein Kitt sagte HTTP/1.1" 200 50. Ich habe gelernt, dass die Anfrage gut läuft.

Frage Wie kann ich ef91707f0434a1a2a7581dd3f4f48d3bdad717 auf meine gemeinsame Präferenz speichern? Genau will ich es speichern wie Token ef91707f0434a1a2a7581dd3f4f48d3bdad717

Antwort

2

Sie Methode implementieren können, um String-Wert in SharedPreferences wie diese zu speichern und laden:

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

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

Methode 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(); 
    } 

Methode 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: Sie können diesen Wert erhalten, wie Sie JSON Objekt als Antwort bekam, wie diese

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


ODER

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){ 
     } 

    } 

oben Code Gson wird verwendet, . GSON kann zum Serialisieren und Deserialisieren von Java-Objekten zu (und von) JSON verwendet werden. Klasse MyKey verwendet wird, das Objekt serialisiert und deserialisiert von Gson, indem Sie dieses Ihr Problem zu tun sollte gelöst

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

Danke Ngima Sherpa, aber wenn 'String value =„ef91707f0434a1a2a7581dd3f4f48d3bdad717“;' ist nicht festgelegt, dh String-Wert = "123123"; oder String value = "efwwewewe" je nach Login-ID und Passwort können geändert werden. Was ich wirklich fragen möchte ist, wie ich diesen Teil einstellen kann: 'String value =" ef91707f0434a1a2a7581dd3f4f48d3bdad717 ";'. –

+0

Woher kommt der Wert? können Sie Wert zuweisen wie 'String value = getValueAccordingToLogInIdAndPassword();' aber Sie müssen 'String getValueAccordingToLogInIdAndPassword() {}' Methode selbst implementieren. –

+0

um .. ich meine der Wert kommt von Server Rest API.es ist die Form '{ " Schlüssel ":" ef91707f0434a1a2a7581dd3f4f48d3bdad717 " }'. Zuerst poste ich meine JSON auf HTTP Körper wie '{" id ":" id_is_this "," password ":" password_is_it "}', und dann Antwort ist wie '{ " Schlüssel ":" ef91707f0434a1a2a7581dd3f4f48d3bdad717 " }'. Ich möchte diese Antwort. Entschuldigen Sie bitte die Störung –

Verwandte Themen