java - Android向ArrayList添加数据时出错

标签 java android arraylist android-asynctask

我发送 POST 请求并获取 JSON 对象。我已经解析了它,但是当我尝试将其添加到 RecyclerViewArrayList 时,我得到 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/

相关文章:

android - 使用 Parcelable 类在 Activity 之间传递对象的 ArrayList

java - 读取ArrayList元素

java - 无法打印 Long 除法和乘法的值

android - getApplicationContext() 不适用于异步事件

Android 操作栏 : click Up-Button programmatically

java - Android Studio : failed to complete gradle execution, 原因为空

java - Spring 启动: How to pass a command line argument into an annotation value?

java - 即使fail-on-end设置为true,当达到测试超时时,Maven也会确保构建失败

javascript - 使用 Thymeleaf 将数据动态插入到 javascript 图表中

java - ArrayList 字符串比较