gpt4 book ai didi

机器人,改造 : Pressing back button during API call crashes the app

转载 作者:行者123 更新时间:2023-11-29 23:44:59 27 4
gpt4 key购买 nike

我正在使用 Retrofit 在我的 Android 应用程序中调用 REST API。要调用 API,我使用与此类似的代码:

private void saveAddress(){
// check if internet is available
if(InternetUtil.getInstance(getApplicationContext()).isOnline()) {
if(validator.validate()) {
showLoader();

CustomerAPI customerAPI =
HttpClient.getClient().create(CustomerAPI.class);

Call<HashMap<String, String>> call = customerAPI.createAddress(address);
call.enqueue(new Callback<HashMap<String, String>>() {
@Override
public void onResponse(Call<HashMap<String, String>> call, Response<HashMap<String, String>> response) {
canGoBack = true;
HashMap<String, String> resultMap = response.body();

if (resultMap.get(Constant.CREATE_OPERATION_RESPONSE_KEY).equals(Constant.ADDRESS_CREATED_RESPONSE_VALUE)) {
hideLoader();
}
}

@Override
public void onFailure(Call<HashMap<String, String>> call, Throwable t) {
System.out.println(t.getMessage());
}
});
}
}else{
DialogUtil.showNoInternetDialog(this);
}
}

我是这样处理硬件的:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if(keyCode == KeyEvent.KEYCODE_BACK)
{
goBack();
return true;
}

return false;
}

/**
* Go back to previous activity
*/
private void goBack(){
Intent intent = new Intent(AddAddressActivity.this, AddressListActivity.class);

startActivity(intent);
finish();
}

问题是,当我点击保存地址按钮时,调用了 API。如果在此期间有人按下硬件后退按钮,我的应用程序就会崩溃。

一种处理方法是引入 bool 变量,如canGoBack。在调用 API 之前,我可以将其设置为 false,在收到响应后,我可以将其设置为 true。然后我必须像这样更改 goBack:

private void goBack(){
if(canGoBack){
Intent intent = new Intent(AddAddressActivity.this, AddressListActivity.class);

startActivity(intent);
finish();
}
}

我觉得上面的代码不是最佳实践(只有 jugaad),必须有更好的方法。

另外,当有人在通话过程中按下主页按钮时?

最佳答案

那是因为 API 调用是异步执行的。在调用 API 时关闭屏幕时,调用仍在执行,并在类的 onResponse 方法中获取响应。当 Activity 被销毁时,它将具有空值。尝试在 onBackPressed 方法中取消 API 调用。更好的方法是在 onStop 方法中使用此代码。

if(call!=null)
call.cancel()

关于机器人,改造 : Pressing back button during API call crashes the app,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51510518/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com