2015-04-12 52 views
0

我想通過Web服務獲取數據,以便我使用下面顯示的asynctask調用。它給了我一個零點例外,如下面的屏幕截圖所示。可能是什麼問題?在Android的AsyncTask類NullPointerException

Activity類

new PickupAsyncTask(getApplicationContext(), null).execute(); 

的AsyncTask類

public class PickupAsyncTask extends AsyncTask<String, Integer, JSONArray> { 
    private OnTaskCompleted listener; 
    private JSONArray responseJson = null; 
    private Context contxt; 
    private Activity activity; 

    public PickupAsyncTask(Context context, OnTaskCompleted listener) { 

     // API = apiURL; 
     this.contxt = context; 
     this.listener = listener; 
    } 

    // async task to accept string array from context array 
    @Override 
    protected JSONArray doInBackground(String... params) { 

     String path = null; 
     String response = null; 
     HashMap<String, String> request = null; 
     JSONObject requestJson = null; 
     DefaultHttpClient httpClient = null; 
     HttpPost httpPost = null; 
     StringEntity requestString = null; 
     ResponseHandler<String> responseHandler = null; 

     try { 
      path = "http://xxxxxxxxxxxxxxx/LocationService.svc/StreetDetails"; 

      new URL(path); 
     } catch (MalformedURLException e) { 

      e.printStackTrace(); 
     } 

     try { 

      // set the API request 
      request = new HashMap<String, String>(); 
      request.entrySet().iterator(); 

      // Store locations in JSON 
      requestJson = new JSONObject(request); 
      httpClient = new DefaultHttpClient(); 
      httpPost = new HttpPost(path); 
      requestString = new StringEntity(requestJson.toString()); 

      // sets the post request as the resulting string 
      httpPost.setEntity(requestString); 
      httpPost.setHeader("Content-type", "application/json"); 

      // Handles the response 
      responseHandler = new BasicResponseHandler(); 
      response = httpClient.execute(httpPost, responseHandler); 

      responseJson = new JSONArray(response); 
      System.out.println("*****JARRAY*****" + responseJson.length()); 

     } catch (Exception e) { 
      Log.e("Buffer Error", "Error converting result " + e.toString()); 
     } 

     return responseJson; 

    } 

    @Override 
    protected void onPostExecute(JSONArray result) { 
     // TODO Auto-generated method stub 
     super.onPostExecute(result); 

     listener.onTaskCompleted(responseJson); //line 101 
    } 

} 

OnTaskCompleted.java

public interface OnTaskCompleted { 
    void onTaskCompleted(JSONArray responseJson); 
} 

回答

1

listenernull。在調用任何方法之前,引入一個檢查來驗證listener不是null

編輯

如果你要處理的任務完成,如下合格OnTaskCompleted匿名對象PickupAsyncTask構造:

new PickupAsyncTask(context, new OnTaskCompleted() { 

     @Override 
     public void onTaskCompleted(JsonArray response) { 
      //Handle the task completion 

     } 
    }).execute(); 
+0

裏面我的活動,這是我如何使用調用異步任務,新的PickupAsyncTask(getApplicationContext(),null).execute();我認爲這是原因,我該如何改變它 – modabeckham

+0

實現'OnTaskCompleted'接口並將引用傳遞給對象作爲第二個參數。 – Rajesh

+0

檢查更新的答案。如果還有更多,您可能需要實現接口的其他方法。 – Rajesh

相關問題