2016-08-09 109 views
2

Ich versuche, den Wert eines bestimmten Felds aus der Kopfzeile mithilfe eines Retrofit-Aufrufs abrufen, um verwendet werden, um zurück an den Server gesendet werden. Ich bin erfolgreich darin, den Wert in den try-Block zu bekommen und ihn sofort im try-Block zu senden. Aber wenn ich dasselbe außerhalb der Aufrufinstanz versuche, ist der Wert von abc (wo ich den Wert des Antwortheaders zugewiesen habe) verloren. Ich habe den String abc bereits als globale Variable deklariert. Wie speichere ich den Wert der Zeichenfolge?Wie kann der Wert einer Variablen in einem Retrofit-Aufruf gespeichert werden?

public class MainActivity extends AppCompatActivity { 
    private static final String LOG_TAG = "MainActivityClass"; 
    String abc; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     ApiInterface apiService = ApiClient.getClient().create(ApiInterface.class); 

     Call<List<TrendingModel>> call = apiService.getAllTodos(); 
     call.enqueue(new Callback<List<TrendingModel>>() { 
      @Override 
      public void onResponse(Call<List<TrendingModel>> call, Response<List<TrendingModel>> response) { 
       try { 

        List<TrendingModel> todoModels = response.body(); // WHERE WE GET THE RESPONSE BODY 
        abc = response.headers().get("Tanand"); // WHERE WE GET THE RESPONSE HEADER AND ASSIGN IT TO abc, WHICH WE DECLARED GLOBALLY 

        ApiClient.getClient(abc).create(ApiInterface.class); // PASSING THE abc VARIABLE TO THE GETCLIENT(TOKEN) METHOD WITHIN 
            // THE SAME TRY BLOCK WHICH WORKDS 

       } catch (Exception e) { 
        Log.d("onResponse", "There is an error"); 
        e.printStackTrace(); 
       } 
      } 

      @Override 
      public void onFailure(Call<List<TrendingModel>> call, Throwable t) { 
       Log.d("onFailure", t.toString()); 
      } 
     }); 

     ApiClient.getClient(abc).create(ApiInterface.class); // VALUE OF abc IS NOT PERSISTED HERE (abc IS NULL) ALTHOUGH WE DECLARED IT GLOBALLY 
    } 
} 

Antwort

3

Versuchen Sie, Methode in OnResponse-Methode aufzurufen.

weil onResponse() Methode im Hintergrund ausgeführt wird, bis die Daten abgerufen werden.

Wenn Sie auf die Daten der Antwort zugreifen möchten dann rufen Sie Ihre Methode in es.

Und außerhalb aller Aussagen genannt werden, bevor die Antwortdaten abgeschlossen, weshalb es nicht Ihnen tatsächliche Daten nicht geben. Verwenden Sie als Good Practice die folgende Methode.

Nur erstellen Sie eine Methode innerhalb der Klasse und rufen Sie alle Anweisungen drin.

Jetzt rufen Sie Ihre Methode innerhalb onResponse Methode.