I am working on an Android activity that consults a database to fill a ListView, I leave the code:
private class EjecutoConsulta extends AsyncTask<Void,Void,List<Comunicado>>{
@Override
protected void onPostExecute(List<Comunicado> datos) {
if (datos!=null){
rellenaDatos(datos);
}
}
@Override
protected List<Comunicado> doInBackground(Void... params) {
DefaultHttpClient httpclient=new DefaultHttpClient();
String url="http://192.168.0.193/estructuraNueva/scripts/leerComunicados.php";
HttpGet httpGet=new HttpGet(url);
String respuesta;
JSONObject json=null;
JSONArray jArray=null;
try {
ResponseHandler<String> responseHandler=new BasicResponseHandler();
respuesta=httpclient.execute(httpGet,responseHandler);
json=new JSONObject(respuesta);
jArray=json.getJSONArray("datos");
}catch (Exception e){
System.out.println("YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY");
}
ArrayList<Comunicado> datos=new ArrayList();
for (int i=0;i<jArray.length();i++){
JSONObject object=null;
try {
object=jArray.getJSONObject(i);
Comunicado comunicado=new Comunicado(object.getString("id"),object.getString("titulo"),object.getString("texto")
,object.getString("imagen"),object.getString("link"));
datos.add(comunicado);
}catch (Exception e){
System.out.println("VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV");
}
}
return datos;
}
}
When I unplug the server, I get this error:
06-08 09:05:02.413 24754-29704/com.example.oftecnica2.appcorporativa E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
Process: com.example.oftecnica2.appcorporativa, PID: 24754
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:309)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int org.json.JSONArray.length()' on a null object reference
at com.example.oftecnica2.appcorporativa.ComunicadosListado$EjecutoConsulta.doInBackground(ComunicadosListado.java:149)
at com.example.oftecnica2.appcorporativa.ComunicadosListado$EjecutoConsulta.doInBackground(ComunicadosListado.java:100)
at android.os.AsyncTask$2.call(AsyncTask.java:295)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
I understand that it jumps when not being able to consult, but if I have everything between try{}catch(){}
, I do not understand why it stops the app. Any way that even if I could not consult, keep running like that? (Logically with the empty list).