在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方法也返回确切的东西。
答案 0 :(得分:1)
您似乎未正确使用AsyncTask。首先,你必须根据Android文档对你的AsyncTask进行子类化/嵌套:
http://developer.android.com/reference/android/os/AsyncTask.html
此外,您应该遵循从嵌套类调用outter类的方法的基本规则。
有一些替代方案,例如:
将AndrestClient对象作为参数传递给doInBackground,然后在outter类中执行类似的操作来调用其方法:
doRequest.execute(休息);