[英]Can't update arraylist after API call in Android Studio
從API調用中檢索數組列表后,我試圖按字母順序對其進行排序:
StarWarsApi.init();
StarWars api = StarWarsApi.getApi();
m_vwPeopleLayout.setAdapter(m_peopleAdapter);
api.getAllPeople(i, new Callback<SWModelList<People>>() {
@Override
public void success(SWModelList<People> planetSWModelList, Response response) {
for (People p : planetSWModelList.results) {
peopleArrayList.add(p);
}
}
@Override
public void failure(RetrofitError error) {
System.out.print("failure");
}
});
//code to sort arrayList
m_peopleAdapter.notifyDataSetChanged();
用於對列表進行排序和更新適配器的代碼已運行,但在API調用完成之前。 我猜這是由於線程未及時完成而引起的。 我試過在排序之前先添加一個sleep語句,但似乎暫停了整個活動。 在運行更多代碼之前,如何等待API調用完成?
m_peopleAdapter.notifyDataSetChanged();
應該在您的Api回調中
api.getAllPeople(i, new Callback<SWModelList<People>>() {
@Override
public void success(SWModelList<People> planetSWModelList, Response response) {
for (People p : planetSWModelList.results) {
peopleArrayList.add(p);
}
m_peopleAdapter.notifyDataSetChanged();
}
@Override
public void failure(RetrofitError error) {
System.out.print("failure");
}
});
更改數據集后,您需要通知適配器。 調用開始后,您的代碼觸發了通知。
在運行更多代碼之前,如何等待API調用完成?
請求完成后,將在UI線程上調用使用success
方法。 從API獲取適配器數據后,執行所有適配器設置或調用success
方法內的notifyDataSetChanged
來更新適配器數據:
@Override
public void success(....) {
for (People p : planetSWModelList.results) {
peopleArrayList.add(p);
}
// call notifyDataSetChanged here
m_peopleAdapter.notifyDataSetChanged();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.