gpt4 book ai didi

Java - 捕获异步方法的异常

转载 作者:太空宇宙 更新时间:2023-11-04 13:20:24 24 4
gpt4 key购买 nike

我正在开发一个通过 CEP(代码地址/邮政编码)的搜索,并且为了进行搜索,我使用了第三方 api (postmon)。

每次我使用无效的邮政编码调用 api 时,应用程序都会崩溃并关闭。我试图捕获异常并返回它,但没有成功。可以帮助我理解我哪里出了问题吗?是这个方法的类型吗?

        //Criar evento do botão
btnBuscaCEP.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//abre thread em background
new HttpRequestTask().execute();
}
});

}

private class HttpRequestTask extends AsyncTask<Void, Void, DAOPostmon> {
String charCepTrim = char_CEP.getText().toString().trim();
final String url = "http://api.postmon.com.br/v1/cep/"+charCepTrim;
RestTemplate restTemplate = new RestTemplate();


@Override
protected DAOPostmon doInBackground(Void... params) {
try {
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
DAOPostmon DAOPostmon = restTemplate.getForObject(url, DAOPostmon.class);
return DAOPostmon;
} catch (Exception e) {
return e.printStackTrace();
}
}

@Override
protected void onPostExecute(DAOPostmon DAOPostmon) {

//quando a tag Logradouro estiver disponiivel no retorno da api rest
if (DAOPostmon.getLogradouro() == null) {

TextView greetingEndereco = (TextView) findViewById(R.id.inputLogradouro);
TextView greetingBairro = (TextView) findViewById(R.id.inputBairro);
TextView greetingCidade = (TextView) findViewById(R.id.inputCidade);
TextView greetingEstado = (TextView) findViewById(R.id.inputEstado);
TextView greetingCEP = (TextView) findViewById(R.id.inputCEP);
greetingEndereco.setText(DAOPostmon.getEndereco().toUpperCase());
greetingCidade.setText(DAOPostmon.getCidade().toUpperCase());
greetingBairro.setText(DAOPostmon.getBairro().toUpperCase());
greetingEstado.setText(DAOPostmon.getEstado().toUpperCase());
greetingCEP.setText(DAOPostmon.getCep());
String endereco = char_Logradouro.getText().toString();
BuscaGeolocalizacao localizacaoEnd = new BuscaGeolocalizacao();
localizacaoEnd.getAddressFromLocation(endereco,
getApplicationContext(), new GeocoderHandler());

} else {

//senão, quando não tiver a tag logradouro, usar endereco

TextView greetingLogradouro = (TextView) findViewById(R.id.inputLogradouro);
TextView greetingBairro = (TextView) findViewById(R.id.inputBairro);
TextView greetingCidade = (TextView) findViewById(R.id.inputCidade);
TextView greetingEstado = (TextView) findViewById(R.id.inputEstado);
TextView greetingCEP = (TextView) findViewById(R.id.inputCEP);
greetingLogradouro.setText(DAOPostmon.getLogradouro().toUpperCase());
greetingCidade.setText(DAOPostmon.getCidade().toUpperCase());
greetingBairro.setText(DAOPostmon.getBairro().toUpperCase());
greetingEstado.setText(DAOPostmon.getEstado().toUpperCase());
greetingCEP.setText(DAOPostmon.getCep());
String endereco = char_Logradouro.getText().toString();
BuscaGeolocalizacao localizacaoEnd = new BuscaGeolocalizacao();
localizacaoEnd.getAddressFromLocation(endereco,
getApplicationContext(), new GeocoderHandler());

}
}
}

还有一个异常(exception),当我使用错误的邮政编码调用它时。

10-14 01:19:16.786 29926-29939/com.clubee.doggywalker W/art: Suspending all threads took: 31.097ms 10-14 01:19:19.767 29926-29939/com.clubee.doggywalker W/art: Suspending all threads took: 11.260ms 10-14 01:19:19.770 29926-29995/com.clubee.doggywalker W/RestTemplate: GET request for "http://api.postmon.com.br/v1/cep/34575235" resulted in 404 (CEP 34575235 nao encontrado); invoking error handler 10-14 01:19:19.856 29926-29995/com.clubee.doggywalker W/RestTemplate: GET request for "http://api.postmon.com.br/v1/cep/34575235" resulted in 404 (CEP 34575235 nao encontrado); invoking error handler 10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #4 10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: Process: com.clubee.doggywalker, PID: 29926 10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: java.lang.RuntimeException: An error occured while executing doInBackground() 10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: at android.os.AsyncTask$3.done(AsyncTask.java:304) 10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) 10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: at java.util.concurrent.FutureTask.setException(FutureTask.java:222) 10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: at java.util.concurrent.FutureTask.run(FutureTask.java:242) 10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: at java.lang.Thread.run(Thread.java:818) 10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: Caused by: org.springframework.web.client.HttpClientErrorException: 404 CEP 34575235 nao encontrado 10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:76) 10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: at org.springframework.web.client.RestTemplate.handleResponseError(RestTemplate.java:524) 10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:481) 10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:439) 10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:237) 10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: at com.clubee.doggywalker.DoggieWalker$HttpRequestTask.doInBackground(DoggieWalker.java:150) 10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: at com.clubee.doggywalker.DoggieWalker$HttpRequestTask.doInBackground(DoggieWalker.java:137) 10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: at android.os.AsyncTask$2.call(AsyncTask.java:292) 10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: at java.util.concurrent.FutureTask.run(FutureTask.java:237) 10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)  10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)  10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)  10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: at java.lang.Thread.run(Thread.java:818)  10-14 01:19:20.059 29926-29926/com.clubee.doggywalker I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@224b3476 time:83894153

在这篇文章的结尾,我又尝试了一次,但是现在,使用 HttpClientErrorException...坏消息。

最佳答案

首先,请取消您正在使用的变量名称的大写:DAOPostmon 是类的名称,请使用 dAOPostmon 作为您的变量。

您似乎遇到了一些问题,您在 catch 方法中返回了错误的类型。只需更改

return e.printStackTrace();

e.printStackTrace();
return null;

并在 onPostExecute 中创建 if 语句

if(DAOPostmon == null || DAOPostmon.getLogradouro() == null)

关于Java - 捕获异步方法的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33116606/

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