2015-10-06 3 views
-1

Выполняя задачу Async в android и получая ответ Json и при преобразовании ответа в JSONArray, я получаю указатель NUll Exception. Я пробую два дня, пожалуйста, помогите мне. Вот код, чтобы получить Json String. ошибка на task.get().Исключение Null указателя при использовании метода Async Task

DownloadTask task=new DownloadTask(); 
     task.execute(new String[]{"URL"}); 
     try { 
      jsonArr=new JSONArray(task.get()); 
       Toast.makeText(getApplicationContext(), jsonArr.toString(), Toast.LENGTH_LONG).show(); 
       for (int i = 0; i < jsonArr.length(); i++) { 
        obj = jsonArr.getJSONObject(i); 
        name = obj.getString("name"); 
        phno = obj.getString("phone"); 
        dcount = obj.getString("count"); 
       } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } catch (ExecutionException e) { 
      e.printStackTrace(); 
     } 

Здесь приведен код задачи Async.

class DownloadTask extends AsyncTask<String,Void,String>{ 

     private ProgressDialog mProgressDialog=new ProgressDialog(MainActivity.this); 

     @Override 
     protected void onPreExecute(){ 
      mProgressDialog.setMessage("Processing"); 
      mProgressDialog.show(); 
     } 

     @Override 
     protected String doInBackground(String... targetURL) { 
      URL url; 
      HttpURLConnection connection = null; 
      try { 

       url = new URL(targetURL[0]); 
       connection = (HttpURLConnection)url.openConnection(); 

       connection.setRequestMethod("GET"); 
       connection.setRequestProperty("Content-Type", 
         "application/json"); 

       connection.setUseCaches (false); 
       connection.setDoInput(true); 
       connection.setDoOutput(true); 

      /* //Send request 
       DataOutputStream wr = new DataOutputStream (
         connection.getOutputStream()); 
       wr.writeBytes("BID1"); 
       wr.flush(); 
       wr.close();*/ 

       //Get Response 
       InputStream is = connection.getInputStream(); 
       BufferedReader rd = new BufferedReader(new InputStreamReader(is)); 
       String line; 
       StringBuffer response = new StringBuffer(); 
       while((line = rd.readLine()) != null) { 
        response.append(line); 
        response.append('\r'); 
       } 
       rd.close(); 
       return response.toString(); 

      } catch (Exception e) { 
       e.printStackTrace(); 
       return null; 

      } finally { 

       if(connection != null) { 
        connection.disconnect(); 
       } 
      } 
     } 
     @Override 
     protected void onPostExecute(String result) { 

      Toast.makeText(getApplicationContext(),result, Toast.LENGTH_SHORT); 
      mProgressDialog.dismiss(); 

     } 
    } 
+0

Опубликовать журнал аварийного. –

+2

Зачем вызывать 'task.get()'? –

+0

Разместите трассировки стека – Jas

ответ

0

Вы забыли назвать супер метод onPostExecute

Это должно быть, как этот

@Override 
protected void onPostExecute(String result) { 

    Toast.makeText(getApplicationContext(),result, Toast.LENGTH_SHORT); 
    mProgressDialog.dismiss(); 
    super.onPostExecute(result); 
} 

Другое решение

Вы можете использовать интерфейс для обратного вызова

ICallback.java

public interface ICallback { 
    void onResult(String result); 
} 

DownloadTask

class DownloadTask extends AsyncTask<String, Void, String> { 
    private ProgressDialog mProgressDialog = new ProgressDialog(MainActivity.this); 
    private ICallback callback; 

    public DownloadTask(ICallback callback) { 
     this.callback = callback; 
    } 

    @Override 
    protected void onPreExecute() { 
     //Your Codes Here 
    } 

    @Override 
    protected String doInBackground(String... targetURL) { 
     //Your Codes Here 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     //Your Codes Here 
     callback.onResult(result) 
    } 
} 

Как использовать его

DownloadTask task = new DownloadTask(new ICallback() { 
    @Override 
    public void onResult(String result) { 
     try { 
      jsonArr=new JSONArray(result); 
      Toast.makeText(getApplicationContext(), jsonArr.toString(), Toast.LENGTH_LONG).show(); 
      for (int i = 0; i < jsonArr.length(); i++) { 
       obj = jsonArr.getJSONObject(i); 
       name = obj.getString("name"); 
       phno = obj.getString("phone"); 
       dcount = obj.getString("count"); 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } catch (ExecutionException e) { 
      e.printStackTrace(); 
     } 
    } 
}); 

task.execute(new String[]{"URL"}); 
+0

Аналогичная ошибка nullpointer exception в jsonArr = new JSONArray (результат); –

+0

В любом месте после инициализации обновите мой ответ, пожалуйста, смотрите на buttom – NaviRamyle

+0

Так в чем же результат? – NaviRamyle

Смежные вопросы