2016-08-09 3 views
2

Retrofit 호출을 사용하여 머리글에서 특정 필드의 값을 검색하여 서버로 다시 보내려고합니다. 나는 try 블록 내부의 값을 얻는 데 성공했으며 try 블록에서도 즉시 리턴한다. 하지만 호출 인스턴스 외부에서 동일한 작업을 시도하면 abc (응답 헤더의 값을 할당 한 위치)의 값이 손실됩니다. 나는 이미 문자열 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 메서드를 호출하십시오.

관련 문제