2016-08-09 17 views
2

我正在尝试使用Retrofit调用来从头中检索某个字段的值,以便将其用于发送回服务器。我成功地获得了try块中的值,并立即在try块中将其返回。但是当我在呼叫实例外尝试相同的时候,abc(这是我分配响应头的值的地方)的值会丢失。我已经将String abc声明为全局变量。如何保存字符串的值?如何在Retrofit调用中保存变量的值?

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

回答

3

尝试调用OnResponse方法中的方法。

因为onResponse()方法在后台运行直到数据被提取。

如果你想访问响应数据,然后在里面调用你的方法

而且所有语句响应数据完成之前,这就是为什么它不给你实际的数据被调用。 作为良好做法,请使用以下方法。

只需创建一个方法里面的类和调用你的所有陈述里面。

现在调用你的方法里面的onResponse方法。