我发送 POST 请求并获取 JSON 对象。我已经解析了它,但是当我尝试将其添加到 RecyclerView
的 ArrayList
时,我得到 0 大小的 ArrayList
。我的AsyncTask
:
new AsyncTask<Void, Void, Void>() {
ProgressDialog loading;
@Override
protected void onPreExecute() {
super.onPreExecute();
loading = ProgressDialog.show(LectorsListActivity.this, null, "Please Wait", true, false);
}
@Override
protected Void doInBackground(Void... params) {
try {
LoginLectorUtils httpUtils = new LoginLectorUtils();
String name, uniqueId, photoUrl;
JSONArray array = new JSONArray(httpUtils.sendPostRequest(REQUEST_URL));
for (int i = 0; i < array.length(); i++) {
JSONObject jsonObject = array.getJSONObject(i);
name = jsonObject.getString("name");
uniqueId = jsonObject.getString("unique_id");
photoUrl = jsonObject.getString("photo_url");
//if (!name.equals("") && !uniqueId.equals("") && !photoUrl.equals("")) {
data.add(new LectorsDataModel(name, uniqueId, photoUrl)); // Here i'm adding new items
//}
}
} catch (Exception e) {
Log.e("LectorsListActivity", "Can't create JSONArray");
}
return null;
}
@Override
protected void onPostExecute(final Void str) {
super.onPostExecute(str);
loading.dismiss();
}
}.execute();
//data = new ArrayList<LectorsDataModel>();
//data.add(new LectorsDataModel("", "", ""));
Toast.makeText(LectorsListActivity.this, Integer.toString(data.size()), Toast.LENGTH_SHORT).show(); // Shows 0
adapter = new LectorsAdapter(data, this);
recyclerView.setAdapter(adapter);
最佳答案
您的代码会在获得结果之前执行,因为您是在数据可用之前查找大小。
这里有两个解决方案
解决方案1
添加
Toast.makeText(LectorsListActivity.this, Integer.toString(data.size()), Toast.LENGTH_SHORT).show(); // Shows 0
adapter = new LectorsAdapter(data, this);
recyclerView.setAdapter(adapter);
在onPostExecute()
方法内部。
解决方案2
添加
adapter.notifyDataSetChanged();
在onPostExecute()
方法内部。
然后放
adapter = new LectorsAdapter(data, this);
在调用AsyncTask
之前
关于java - Android向ArrayList添加数据时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35185882/