私は別の質問でここにいます。JSONObject (Web サービス) から値を取得するための AsyncTask 関数のコードを投稿します。私の問題は、リストがあり、このリストに onSuccess メソッドの json からのデータを入力しますが、後で AsyncTask の onPostExecute メソッドで「結果」が null になることです。
private class getCategories extends AsyncTask<String, Void, List<Category>> {
private int num_cat_subcat; // category count
@Override
protected List<Category> doInBackground(String... arg0) {
AsyncHttpClient client = new AsyncHttpClient();
client.get(arg0[0], null, new JsonHttpResponseHandler() {
public void onSuccess(JSONObject data) {
try {
JSONObject response = data.getJSONObject("response");
JSONArray categories = response
.getJSONArray("categories");
// elements count
num_cat_subcat = categories.length();
for (int i = 0; i < categories.length(); i++) {
JSONObject item = (JSONObject) categories
.getJSONObject(i);
if (item.getString("id").equalsIgnoreCase(
"4d4b7105d754a06376d81259")) {
JSONArray subcategories = item
.getJSONArray("categories");
// Category --> id, name, pluralName, shortName,
// icon_prefix, icon_suffix, primary, parentId
Category newItem = new Category(item
.getString("id"), item
.getString("name"), item
.getString("pluralName"), item
.getString("shortName"), null, null,
null);
listCategories.add(newItem);
newItem = null;
if (subcategories.length() > 0) {
// Si tiene subcategorias las contamos.
num_cat_subcat += subcategories.length();
for (int j = 0; j < subcategories.length(); j++) {
JSONObject subitem = (JSONObject) subcategories
.getJSONObject(j);
Category newSubItem = new Category(
subitem.getString("id"),
subitem.getString("name"),
subitem.getString("pluralName"),
subitem.getString("shortName"),
null, null, item
.getString("id"));
listCategories.add(newSubItem);
newSubItem = null;
}
}
}
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void onFailure(Throwable arg0) {
}
});
return listCategories;
}
@Override
protected void onPostExecute(List<Category> result) {
Log.i("result", result.toString());
for (int k = 0; k < result.size(); k++) {
ALLOFTHEM += result.get(k).getId();
if (k < result.size() - 1) {
ALLOFTHEM += ",";
}
}
}
}