【发布时间】:2013-05-28 10:53:17
【问题描述】:
我是带着另一个问题来的。我将我的 AsyncTask 函数中的代码发布给您,以从 JSONObject(Web 服务)中获取值。我的问题是我有一个列表,我在 onSuccess 方法中用来自 json 的数据填充这个列表,但后来在 AsyncTask 的 onPostExecute 方法中,“结果”为空。
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 += ",";
}
}
}
}
【问题讨论】:
-
你在
ListView上看到你想要的数据了吗?你的调试监视器会带你进入onPostExecute -
打印有异常吗?
-
我认为你应该放一些日志消息来检查你的代码在什么时候工作。
-
你在使用loopj api吗?
-
当我进入 onPostExecute 时,它会显示一个登录 logcat。但是在 onSuccess listCategories 里面有数据,在外面,onPostExecute 结果在 logcat 中显示为 []
标签: android json android-asynctask