Android AsyncTask获得异常null

时间:2014-12-23 03:21:59

标签: java android android-asynctask

在AsyncTask android中。在另一个类中调用方法时,会在doInBackGround()任务中获得一个等于null的异常。

即使是rest.request(url,method,json)中的硬编码也不起作用

       protected JSONArray doInBackground(Void... arg0) {

            try {
                return rest.request(url, method, json);  // <-- returns json array
            } catch (Exception e) {
                this.e = e; 
            }
            return null; // <--- returning this null

        }

其他事情都是这样的,

private class doRequest extends AsyncTask<Void, JSONArray, JSONArray>
protected void onPostExecute(JSONArray data)


/*rest client class*/
public class AndrestClient {

// The client to use for requests
DefaultHttpClient client = new DefaultHttpClient();
public JSONArray request(String url, String method, String json) throws RESTException {
        if (method.matches("GET")) {
            return get(url);
        } else if (method.matches("POST")) {
            return post(url, json);
        } else if (method.matches("PUT")) {
            //return put(url, data);
        } else if (method.matches("DELETE")) {
            //return delete(url);
        }
        throw new RESTException("Error! Incorrect method provided: " + method);
    }

    public JSONArray get(String url) throws RESTException {

        String jsonjr = "['Chanuthi','Damsith','Dunili','Isath','Minuka','Uvin','Vidath']";

        JSONArray jsonAraay = null;
        try {
            jsonAraay = new JSONArray(jsonjr);
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return jsonAraay;
}
}

我得到的例外是e = null。所有其他事情都正常。当我在doInBackGround中对结果进行硬编码时,它可以正常工作。其余的客户端get方法也返回确切的东西。

1 个答案:

答案 0 :(得分:1)

您似乎未正确使用AsyncTask。首先,你必须根据Android文档对你的AsyncTask进行子类化/嵌套:

http://developer.android.com/reference/android/os/AsyncTask.html

此外,您应该遵循从嵌套类调用outter类的方法的基本规则。

有一些替代方案,例如:

  • 在AsyncTask
  • 的onPreExecute()中创建AndrestClient对象
  • 将AndrestClient对象作为参数传递给doInBackground,然后在outter类中执行类似的操作来调用其方法:

    doRequest.execute(休息);