我在尝试执行此代码时遇到了一些麻烦:
@Override
public void loginProcessGoogle(User googleUser) {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Constants.BASE_URL)
.callbackExecutor(Executors.newSingleThreadExecutor())
.addConverterFactory(GsonConverterFactory.create())
.build();
RequestInterface requestInterface = retrofit.create(RequestInterface.class);
User user = new User();
String email = googleUser.getEmail() == null ? "" : googleUser.getEmail();
String name = googleUser.getName();
String googleId = googleUser.getProvider_id();
user.setEmail(email);
user.setName(name);
user.setProvider_id(googleId);
user.setProvider_name(User.provider_name_google);
ServerRequest request = new ServerRequest();
request.setUser(user);
Call<ServerResponse> response = requestInterface.socialAuthenticate(request);
response.enqueue(new Callback<ServerResponse>() {
@Override
public void onResponse(Call<ServerResponse> call, retrofit2.Response<ServerResponse> response) {
ServerResponse resp = response.body();
Snackbar.make(getView(), resp.getMessage(), Snackbar.LENGTH_LONG).show();
if(resp.getResult().equals(Constants.SUCCESS)){
SharedPreferences.Editor editor = pref.edit();
editor.putBoolean(Constants.IS_LOGGED_IN,true);
editor.putString(Constants.EMAIL,resp.getUser().getEmail());
editor.putString(Constants.NAME,resp.getUser().getName());
editor.putString(Constants.ID,resp.getUser().getId());
editor.apply();
goToProfile();
}
progress.setVisibility(View.INVISIBLE);
}
@Override
public void onFailure(Call<ServerResponse> call, Throwable t) {
progress.setVisibility(View.INVISIBLE);
Log.d(Constants.TAG,"failed");
Snackbar.make(getView(), t.getLocalizedMessage(), Snackbar.LENGTH_LONG).show();
}
});
String testString= "Hello";
}
当我调试这段代码时,我在 user.setEmail(email); 中放置一个断点,它会在response.enqueue回调之前进入另一个断点,当我试图放一个onResponse方法中的断点,它立即转到底部的字符串变量( testString ) 首先在底部的字符串变量之前输入 response.enqueue 的最佳方法是什么,例如在 ServerResponse resp = response.body(); ?
答案 0 :(得分:0)
你不能,因为enqueue方法在另一个线程中运行你的setEmail线程,直到retofit接收它执行onResponse方法的结果。 哟可以使用excute方法代替enque。有关详细信息,请参见此处https://futurestud.io/tutorials/retrofit-synchronous-and-asynchronous-requests。