改造,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 库)。
这是我的代码:
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 库)。