1
retrofitを使用してレスポンスを正しく取得した後、レスポンスボディのオブジェクトにレスポンスを渡しますが、UIスレッドでオブジェクトを取得できません。 NullPointerExceptionエラー、私はそれが非同期要求の問題だと思います、どうすればこの問題を回避できますか?Android Retrofitリクエストメインスレッドでレトロフィットレスポンスを取得する方法
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) {
}
});
}
ええ、私はちょうどclickListenerで戻り値を取得する必要があります。それ以外の場合、レスポンスブロックに移動すると取得できません。 –
クリックリスナーでリスナーonClick()メソッドを取得できませんネットワークコールが応答で戻ってくるずっと前に実行を終了してください。応答で何をしたいですか? UIを更新しますか? – elmorabea
次のステップでは戻り値を使用して別のリクエストを行うため、すぐに応答を取得したい –