I use an AsyncTask in the app that works blz, but if the WebService is off the air, it returns that the application stopped, I already tried to handle the exception in several ways but it does not work, as below the Asynctask code working:
private class ConsultaWebServiceCategoria extends AsyncTask<String, Void, String> {
String Conteudo;
String erro;
ProgressDialog progressDialog = new ProgressDialog(getActivity());
@Override
protected void onPreExecute() {//responsavel pelo carregamento inicial
super.onPreExecute();
progressDialog.setTitle("Por favor aguarde ...");
progressDialog.setProgressStyle(2);
progressDialog.setMessage("Carregando dados...");
progressDialog.show();
}
@Override
protected String doInBackground(String... params) {//responsavel por executar a requisição utilizando os parametros passados
URL url;
BufferedReader br = null;
String registro;
try {
url = new URL(params[0]);//url do webservice
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
OutputStreamWriter outputStreamWr = new OutputStreamWriter(connection.getOutputStream());
outputStreamWr.flush();
br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
StringBuilder sb = new StringBuilder();
while ((registro = br.readLine()) != null) {
sb.append(registro);
sb.append(System.getProperty("line.separator"));
}
return sb.toString();
} catch (MalformedURLException e) {
erro = e.getMessage();
e.printStackTrace();
return null;
} catch (IOException e) {
erro = e.getMessage();
e.printStackTrace();
return null;
} finally {
try {
br.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
}
@Override
protected void onPostExecute(String result) {
String Conteudo_1 = result;
String Conteudo_tratado_1 = Conteudo_1.replace("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<string xmlns=\"http://digits.com.br/\"", "{\"Android\":");
String Conteudo_2 = Conteudo_tratado_1;
String Conteudo_tratado_2 = Conteudo_2.replace("string", "}");
String Conteudo_3 = Conteudo_tratado_2;
String Conteudo_tratado_3 = Conteudo_3.replaceAll("[</>\n]", "");
String Conteudo_4 = Conteudo_tratado_3;
String Conteudo_tratado_4 = Conteudo_4.replace("\", "");
String Conteudo_5 = Conteudo_tratado_4;
String Conteudo_tratado_5 = Conteudo_5.replace("Date(", "");
String Conteudo_6 = Conteudo_tratado_5;
String Conteudo_tratado_6 = Conteudo_6.replace("0)", "0");
String Conteudo_7 = Conteudo_tratado_6;
String Conteudo_tratado_7 = Conteudo_7.replace("null", ".");
String Conteudo_8 = Conteudo_tratado_7;
String Conteudo_tratado_8 = Conteudo_8.replace(")", "");
progressDialog.dismiss();//finalizando a caixa de dialogo do aguarde
Ac_Df_Categoria_Produto ac_df_categoria_produto = new Ac_Df_Categoria_Produto();
JSONObject jsonResponse;
try {
jsonResponse = new JSONObject(Conteudo_tratado_8);
JSONArray jsonArray = jsonResponse.optJSONArray("Android");//capturando tag que antecede o resultado que esta no webservices
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject child = jsonArray.getJSONObject(i);
//alimentando a classe
ac_df_categoria_produto.setId(child.getInt("PCT_ID_21"));
ac_df_categoria_produto.setDescricaoInternet(child.getString("PCT_DESCRICAO_INTERNET_21"));
ac_df_categoria_produto.setPossui_tamanho(child.getString("PCT_POSSUI_TAMANHO_21"));
processFinishPedido(ac_df_categoria_produto);
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//@Override
public void processFinishPedido(Ac_Df_Categoria_Produto ac_df_categoria_produto) {//resultado do OnPostExecute
// TextView showParsedJSON = (TextView) findViewById(R.id.showParsedJSON);
if (ac_df_categoria_produto.getDescricaoInternet() != null) {
int IdCategoria = ac_df_categoria_produto.getId();
String NomeCategoria = ac_df_categoria_produto.getDescricaoInternet();
String PossuiTamanho = ac_df_categoria_produto.getPossui_tamanho();
Ac_Df_Categoria_Produto p = new Ac_Df_Categoria_Produto(IdCategoria, NomeCategoria, PossuiTamanho);
categoria_produtoList.add(0, p);
adapter.notifyDataSetChanged();
swipeRefreshLayout.setRefreshing(false);
}
}