[英]How to save the value of a variable inside a Retrofit call?
我正在嘗試使用用於發送回服務器的 Retrofit 調用從標頭中檢索某個字段的值。 我成功地獲取了 try 塊中的值並立即在 try 塊中將其發送回。 但是當我在調用實例之外嘗試相同的操作時,abc 的值(這是我分配響應頭的值的地方)丟失了。 我已經將字符串 abc 聲明為全局變量。 如何保存字符串的值?
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
}
}
嘗試在 OnResponse 方法中調用方法。
因為onResponse()
方法在后台運行,直到獲取數據。
如果您想訪問響應數據,請在其中調用您的方法。
在響應數據完成之前調用所有語句,這就是為什么它不給你實際數據。 作為一種良好做法,請使用以下方法。
只需在類中創建一個方法並在其中調用所有語句。
現在在 onResponse 方法中調用您的方法。
您可以在 Retrofit 的 onResponse 方法中使用 setter 方法。 這個答案解釋了如何去做https://stackoverflow.com/a/63060520/10123715
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.