改造,call.enqueue

Retrofit, call.enqueue

这是我的代码:

retrofit2.Call<User> call = MainActivity.apiInterface.performUserLogin (username,password);
       Log.d(TAG,"retrofit");
        call.enqueue (new Callback<User> () {
            @Override
            public void onResponse( retrofit2.Call<User> call, Response<User> response )
            {
                Log.d (TAG,"in");
              if(response.body ().getResponse ().equals ("ok"))
                {
                    Log.d (TAG,"ok");
                    MainActivity.prefConfig.writeLoginStatus (true);
                    loginFormActivityLisener.performLogin (response.body ().getName ());
                }
                else if(response.body ().getResponse ().equals ("failed"))
              {
                  MainActivity.prefConfig.displayToast ("Login Failed... Please try again...");
                  Log.d(TAG,"failed");
              }

            }

            @Override
            public void onFailure( retrofit2.Call<User> call, Throwable t ) {

            }
        });

我有疑问,为什么 call.enqueue 不起作用?就像它不在那里一样。它什么都不做。

Retrofit 的enqueue() 函数是异步工作的。它是一个后台任务,在后台线程上运行请求。如果您调试代码,您很可能会看到调试器跳过入队调用并继续执行下一行。当后台线程完成时,可能在跳过几行之后,它返回到 call.enqueue()。

如果你想使用前台任务,你可以选择 execute() 函数,或者有其他实现等待主线程直到回调响应,比如使用事件(参见 EventBus 库)。