向ArrayList添加数据时出现Android错误

时间:2016-02-03 19:24:40

标签: java android arraylist android-asynctask

我发送POST请求并获取JSON对象。我已对其进行了解析,但是当我尝试将其添加到ArrayList的{​​{1}}时,我得到0 RecyclerView的大小。我的ArrayList

AsyncTask

2 个答案:

答案 0 :(得分:1)

在获得结果之前,您正在执行代码,因为您在数据可用之前找到了大小。

这里有两个解决方案

解决方案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

之前

答案 1 :(得分:0)

您也可以尝试使用RxAndroid(+可选Retrolambda)。检查以下示例哪个应针对您的问题。

创建可以发出物品的observable:

    rx.Observable<List<Item>> fetchItems() {
    return Observable.create(
        subscriber -> {
            try {
                Thread.sleep(2000); //simulate long operation
                subscriber.onNext(yourItems());
            } catch (InterruptedException e) {
                subscriber.onError(e);
            }
        }
    );
}

并订阅它:

    Subscription subscription = fetchItems()
        .subscribeOn(Schedulers.newThread())
        .observeOn(AndroidSchedulers.mainThread())
        .doOnSubscribe(() -> mProgressDialog = ProgressDialog.show(getContext(), "Progress", "Please Wait", true))
        .doOnTerminate(this::dismissProgressDialog)
        .subscribe(
            items -> {
                recyclerView.setAdapter(new SimpleAdapter(items));
                dismissProgressDialog();
            },
            e -> Log.e("onError", e.getMessage())
        );

'Observable.create'中的代码将在新线程中执行,在Android UI线程中休息。