【发布时间】:2015-10-14 04:24:09
【问题描述】:
我正在通过 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());
}
}
}
还有一个例外,当我用错误的邮政编码调用它时。
10-14 01:19:16.786 29926-29939/com.clubee.doggywalker W/艺术:暂停所有线程耗时:31.097 毫秒 10-14 01:19:19.767 29926-29939/com.clubee.doggywalker W/艺术:暂停所有线程耗时:11.260ms 10-14 01:19:19.770 29926-29995/com.clubee.doggywalker W/RestTemplate:对“http://api.postmon.com.br/v1/cep/34575235”的 GET 请求导致 404(CEP 34575235 nao encontrado);调用错误处理程序 10-14 01:19:19.856 29926-29995/com.clubee.doggywalker W/RestTemplate:对“http://api.postmon.com.br/v1/cep/34575235”的 GET 请求导致 404(CEP 34575235 nao encontrado);调用错误处理程序 10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: 致命异常: AsyncTask #4 10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: 进程: com.clubee.doggywalker, PID: 29926 10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: java.lang.RuntimeException: 执行 doInBackground() 时出错 10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: 在 android.os.AsyncTask$3.done(AsyncTask.java:304) 10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: 在 java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) 10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: 在 java.util.concurrent.FutureTask.setException(FutureTask.java:222) 10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: 在 java.util.concurrent.FutureTask.run(FutureTask.java:242) 10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: 在 android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: 在 java.lang.Thread.run(Thread.java:818) 10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: 由: org.springframework.web.client.HttpClientErrorException: 404 CEP 34575235 nao encontrado 引起 10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: 在 org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:76) 10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: 在 org.springframework.web.client.RestTemplate.handleResponseError(RestTemplate.java:524) 10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: 在 org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:481) 10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: 在 org.springframework.web.client.RestTemplate.execute(RestTemplate.java:439) 10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: 在 org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:237) 10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: 在 com.clubee.doggywalker.DoggieWalker$HttpRequestTask.doInBackground(DoggieWalker.java:150) 10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: 在 com.clubee.doggywalker.DoggieWalker$HttpRequestTask.doInBackground(DoggieWalker.java:137) 10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: 在 android.os.AsyncTask$2.call(AsyncTask.java:292) 10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: 在 java.util.concurrent.FutureTask.run(FutureTask.java:237) 10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: 在 android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 10-14 01:19:19.868 29926-29995/com.clubee.doggywalker E/AndroidRuntime: 在 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...坏消息。
【问题讨论】:
-
看起来您遇到了 404 not found 错误
标签: java android exception-handling