Android的改造要求如何让主线程
我用改装来正确地得到响应改型响应,然后我通过在回应主体对象的反应,而它未能获得在UI线程对象,有一个NullPointerException异常错误,我认为这是异步请求的问题,如何避免这个问题?Android的改造要求如何让主线程
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = findViewById(R.id.button);
util = new Util(this);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
util.login("[email protected]", "sdjflsdkf");
// There is a NullPointerException? How Can I
// use this methond correctly in this way?
Log.d("user", util.getUserInfo().toString());
}
});
}
public class Util {
private UserInfo userInfo;
public UserInfo getUserInfo() {
return userInfo;
}
public void login(final String email, final String password) {
Call<UserInfo> loginCall = apiInterface.login(email, password);
loginCall.enqueue(new Callback<UserInfo>() {
@Override
public void onResponse(Call<UserInfo> call, Response<UserInfo> response) {
userInfo = response.body();
}
@Override
public void onFailure(Call<UserInfo> call, Throwable t) {
}
});
}
回答:
移动此线内的onResponse()
Log.d("user", util.getUserInfo().toString());
你所得到的用户信息对象太真的,它是空的时候,你是在试图访问它
就像那个
public class Util { public interface Callback {
void onResponse(UserInfo info);
}
private UserInfo userInfo;
public UserInfo getUserInfo() {
return userInfo;
}
public void login(final String email, final String password, final Callback callback) {
Call<UserInfo> loginCall = apiInterface.login(email, password);
loginCall.enqueue(new Callback<UserInfo>() {
@Override
public void onResponse(Call<UserInfo> call, Response<UserInfo> response) {
userInfo = response.body();
callback.onResponse(userInfo);
Log.d("user", userInfo.toString());
}
@Override
public void onFailure(Call<UserInfo> call, Throwable t) {
}
});
}
这里是你如何使用它
Util.login("email", "password", new Util.Callback() { void onResponse(User info) {
// Update UI
}
});
请注意,这个回调可导致内存泄漏,请确保您留下您的当前活动/片段进行清洁。
以上是 Android的改造要求如何让主线程 的全部内容, 来源链接: utcz.com/qa/258881.html