非同期タスクの結果を呼び出し元のクラスに渡す必要があります。他のクラスから呼び出される別の ASync クラスを作成しました。「Post Execute」メソッドの非同期タスクからの応答をクラスメソッドの呼び出しに渡していますが、null ポイント例外が発生しています。以下は私の呼び出し方法です
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 メソッドを記述すると、すべて正常に動作します。
結果を渡すとき、またはメソッドを呼び出すときに何かが欠けているかどうかはわかりません。お知らせ下さい。ありがとう。