我需要将异步任务结果传递给调用类。我创建了一个单独的ASync类,可以从其他类调用。我将“Post Execute”方法中的Async任务的响应传递给调用类方法,但是获得了零点异常。下面是我在
中的调用方法public boolean getCategories() {
serUri = "categories.json";
WebServiceAsyncTask webServiceTask = new WebServiceAsyncTask();
webServiceTask.execute(serUri,this);
return true;
}
从aysnc任务下面的结果执行的方法是
public void writeJSONArray(final JSONArray result)
{
try {
for (int i=0; i<result.length();i++){
JSONObject c = result.getJSONObject(i);
String name = c.getString("catname");
}
} catch (JSONException e) {
e.printStackTrace();
}
}
WebServiceAsyncTask类:
public class WebServiceAsyncTask extends AsyncTask<Object,Void,JSONArray> {
ROMSjson roms;
private static JSONArray json = null;
private Context context = null;
protected JSONArray doInBackground(Object... params) {
// TODO Auto-generated method stub
String serviceUrl = (String) params[0];
final HTTPHelper httph = new HTTPHelper(serviceUrl,context);
if(serviceUrl.equalsIgnoreCase("categories.json")) {
json = httph.fetch();
}else if(serviceUrl.equalsIgnoreCase("categories/create"))
{
}
return json;
}
@Override
protected void onPostExecute(JSONArray result) { // invoked on the ui thread
roms.writeJSONArray(result);
super.onPostExecute(result);
}
调用roms.writeJSONArray(result)
时,我得到零点异常。在此命令之前正确接收结果。我查看了Log语句。另外,如果我在我的Async类中编写writeJSONArray方法而不是调用类,那么一切正常。
我不确定在传递结果或调用方法时是否遗漏了某些内容。请指教。感谢。
答案 0 :(得分:0)
问题在于:
else if(serviceUrl.equalsIgnoreCase("categories/create"))
{
// if it falls to this condition then your json object appears to be null
}
希望这有帮助。
答案 1 :(得分:0)
null pointer exception
因为roms is null
您在ROMSjson roms;
内声明WebServiceAsyncTask
但未初始化它!
并在`onPostExecute(JSONArray result)
中使用它roms.writeJSONArray(result);` // here roms in null
所以 initialize roms
才能使用它!
答案 2 :(得分:0)
接口是在类之间传递数据的最佳方式。
创建公共界面
public interface WebCallListener{
void onCallComplete(JSONArray result);
}
在班上做什么?
public class WebServiceAsyncTask extends AsyncTask<Object,Void,JSONArray> {
ROMSjson roms;
private static JSONArray json = null;
private Context context = null;
//update
private WebCallListener local;
public WebServiceAsyncTask(WebCallListener listener){
local=listener;
}
/////
protected JSONArray doInBackground(Object... params) {
// TODO Auto-generated method stub
String serviceUrl = (String) params[0];
final HTTPHelper httph = new HTTPHelper(serviceUrl,context);
if(serviceUrl.equalsIgnoreCase("categories.json")) {
json = httph.fetch();
}else if(serviceUrl.equalsIgnoreCase("categories/create"))
{
}
return json;
}
@Override
protected void onPostExecute(JSONArray result) { // invoked on the ui thread
//update
super.onPostExecute(result);
local.onCallComplete(result);
}
来自您的通话课程。
public class CallingClass extends Activity{
protecte void oncreate(Bundle b){
new WebServiceAsyncTask(new WebCallListener() {
@Override
public void onCallComplete(JSONArray result) {
//play with your response
}
});
}
}