簡體   English   中英

如何在 Retrofit 調用中保存變量的值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM