2015-04-12 89 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