改造,打电话入队

时间:2018-07-16 09:15:24

标签: android-studio retrofit call

这是我的代码:

 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不起作用?就像没有在那里。它什么也没做。

1 个答案:

答案 0 :(得分:0)

Retrofit的

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

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