我发送POST请求并获取JSON对象。我已对其进行了解析,但是当我尝试将其添加到ArrayList
的{{1}}时,我得到0 RecyclerView
的大小。我的ArrayList
:
AsyncTask
答案 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线程中休息。