2015-12-01 4 views
0

У меня есть проблема с некоторой информацией, загружаемой из DDBB. Я получаю всю информацию, но я не могу хранить ее на своих массивах, потому что метод onPostExecute() не запускается. Я поместил свой код:onPostExecute() не запускается

RequestRocodromo.java, является классом для запроса и получения информации, в переменной «results» У меня есть вся информация, но я не могу ее хранить на массивах onPostExecute() :

@Override 
protected JSONObject doInBackground(String... params) 
{ 
    HttpClient httpclient = new DefaultHttpClient(); 
    HttpPost httppost = new HttpPost(_url); 

    String results = "NO OK"; 
    try 
    {  
     // Add your data 
     /*List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1); 
     nameValuePairs.add(new BasicNameValuePair("mac", _mac)); 
     httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));*/ 

     // Execute HTTP Post Request 
     HttpResponse response = httpclient.execute(httppost); 

     response.getAllHeaders(); 
     response.getEntity(); 

     if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) 
     { 
      results = EntityUtils.toString(response.getEntity()); 
     } 

     broadcastIntent = new Intent(); 
     broadcastIntent.putExtra("correcto", results); 
     broadcastIntent.setAction(ACTION_REQUEST_ROCODROMO); 
     broadcastIntent.addCategory(Intent.CATEGORY_DEFAULT); 
     _ctx.sendBroadcast(broadcastIntent); 
    }  
    catch (Exception ex) 
    { 
     ex.printStackTrace();  
    } 

    return null; 
} 

@Override 
protected void onPostExecute(JSONObject jsonResponse) 
{ 
    super.onPostExecute(jsonResponse); 

    List<String> values = new ArrayList<String>(); 
    ArrayList<String> rocodromoId = new ArrayList<String>(); 
    ArrayList<String> rocodromoArray = new ArrayList<String>(); 
    ArrayList<String> ciudadArray = new ArrayList<String>(); 
    ArrayList<String> comentarioArray = new ArrayList<String>(); 
    //Procesamos los resultados 
    try 
    { 
     if(jsonResponse != null) 
     { 
      JSONArray jsonMainNode =jsonResponse.optJSONArray("edificios"); 

      int lengthJsonArr =jsonMainNode.length(); 
      for(int i=0; i<lengthJsonArr; i++) 
      { 
       JSONObject jsonChildNode = jsonMainNode.getJSONObject(i); 
       rocodromoId.add(jsonChildNode.optString("id")); 
       rocodromoArray.add(jsonChildNode.optString("nombre")); 
       ciudadArray.add(jsonChildNode.optString("ciudad")); 
       comentarioArray.add(jsonChildNode.optString("comentario")); 
       values.add(jsonChildNode.optString("nombre")); 
      } 
     } 

     String result[] = values.toArray(new String[values.size()]); 

     broadcastIntent = new Intent(); 
     broadcastIntent.putExtra("edificios", result); 
     broadcastIntent.putStringArrayListExtra("id_rocodromo", rocodromoId); 
     broadcastIntent.putStringArrayListExtra("rocodromoArray", rocodromoArray); 
     broadcastIntent.putStringArrayListExtra("ciudadArray", ciudadArray); 
     broadcastIntent.putStringArrayListExtra("comentarioArray", comentarioArray); 
     broadcastIntent.setAction(ACTION_REQUEST_ROCODROMO); 
     broadcastIntent.addCategory(Intent.CATEGORY_DEFAULT); 
     _ctx.sendBroadcast(broadcastIntent); 

    } 
    catch (Exception e) 
    { 
     String result = "null"; 

     broadcastIntent = new Intent(); 
     broadcastIntent.putExtra("edificios", result); 
     broadcastIntent.putStringArrayListExtra("id_rocodromo", rocodromoId); 
     broadcastIntent.putStringArrayListExtra("rocodromoArray", rocodromoArray); 
     broadcastIntent.putStringArrayListExtra("ciudadArray", ciudadArray); 
     broadcastIntent.putStringArrayListExtra("comentarioArray", comentarioArray); 
     broadcastIntent.setAction(ACTION_REQUEST_ROCODROMO); 
     broadcastIntent.addCategory(Intent.CATEGORY_DEFAULT); 
     _ctx.sendBroadcast(broadcastIntent); 
    } 
} 

Rocodromo.java, вот где я начинаю выполнять метод:

RequestRocodromo re = new RequestRocodromo(ctx, finalURL + "request=1");   

re.execute(""); 

Rocodromo.java, вот мой широковещательный, когда я пытаюсь получить информацию Список_массивов я ПОЛУЧУ nullException, потому что мой arraylist является нулевым, потому что он никогда не запускает onPostE xecute().

public class ReceptorBroadcast extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context arg0, Intent intent) 
    { 
     if(RequestRocodromo.ACTION_REQUEST_ROCODROMO.equals(intent.getAction())) 
     { 
      idRocodromo = intent.getStringArrayListExtra("id_rocodromo"); 
      Toast.makeText(getApplicationContext(), idRocodromo.get(0).toString(), Toast.LENGTH_LONG).show(); 
      rocodromo = intent.getStringArrayListExtra("rocodromoArray"); 
      Toast.makeText(getApplicationContext(), rocodromo.get(0).toString(), Toast.LENGTH_LONG).show(); 
      ciudad = intent.getStringArrayListExtra("ciudadArray"); 
      Toast.makeText(getApplicationContext(), ciudad.get(0).toString(), Toast.LENGTH_LONG).show(); 
      comentario = intent.getStringArrayListExtra("comentarioArray"); 
      Toast.makeText(getApplicationContext(), comentario.get(0).toString(), Toast.LENGTH_LONG).show(); 
     } 
    } 
} 

Может ли кто-нибудь помочь мне с этим? Благодаря! :)

+1

Возможно, из-за возврата 'return null;' from' doInBackground' метод –

ответ

0

Изменения в doInBackGround вернуться к нулю:

try { 
    return new JSONObject(reusults); 
} catch (Throwable t) { 
    return null; 
} 
+0

он работает, спасибо! :) – Imrik

0

Изменения трансляции приемника вызова в вашем doInBackground() .. в

runOnUiThread(new Runnable() { 

      @Override 
      public void run() { 

      broadcastIntent = new Intent(); 
      broadcastIntent.putExtra("correcto", results); 
      broadcastIntent.setAction(ACTION_REQUEST_ROCODROMO); 
      broadcastIntent.addCategory(Intent.CATEGORY_DEFAULT); 
      _ctx.sendBroadcast(broadcastIntent); 
     } 
    }); 

и проверить нулевой результат в onPostExecute, как ..

if(null!=jsonResponse) // avoids null pointer; 
Смежные вопросы