簡體   English   中英

在Android Studio中調用API后無法更新arraylist

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM