[英]Appending data to list
我在建議列表中顯示來自兩個不同API調用的數據,所以我在onQueryTextChange()中調用兩個API,因為我從兩個不同的api調用中獲取響應,所以我使用addAll()追加來自不同api的響應。沒有添加並且列表的大小為零。但是如果我使用searchResponses= (List<UserVideo>) response;
然后將數據添加到列表中,但未附加兩個不同的響應。我在哪里出錯?
@Override
public boolean onQueryTextChange(String s)
{
if(s.length()>=1) {
String mStart = "";
int mCount = 10;
String[] columnNames = {"_id", "name", "userImage", "location"};
final String[] temp = new String[4];
final MatrixCursor cursor = new MatrixCursor(columnNames);
SearchAPI.getSearchFeed(getApplicationContext(), s, mStart, mCount, mSettingsManager.getInstance().getAccessToken(), new APIResponseListener() {
@Override
public void onResponse(Object response) {
searchResponses.addAll((List<UserVideo>) response);
for (UserVideo searchResponse :searchResponses)
{searchResponse.setIsVideo(true);
temp[0] = Long.toString(id++);
temp[1] = searchResponse.getCaption();
temp[3] = searchResponse.getLocation();
cursor.addRow(temp);
}
mSearchView.setSuggestionsAdapter(new SearchListAdapter(HomeActivity.this, cursor));
}
@Override
public void onError(VolleyError error) {
if (error instanceof NoConnectionError) {
}
}
});
SearchAPI.getSearchUser(getApplicationContext(), s,mSettingsManager.getInstance().getAccessToken(), new APIResponseListener() {
@Override
public void onResponse(Object response)
{
searchResponses.addAll((List<UserVideo>) response);
for (UserVideo searchResponse :searchResponses) {
searchResponse.setIsVideo(false);
temp[0] = Long.toString(id++);
temp[1] = searchResponse.getUserName2();
temp[3] = searchResponse.getName();
cursor.addRow(temp);
}
mSearchView.setSuggestionsAdapter(new SearchListAdapter(HomeActivity.this, cursor));
}
@Override
public void onError(VolleyError error)
{
if (error instanceof NoConnectionError) {
}
}
});
}
return true;
}
根據DavidJohns的答案進行了更新-
public boolean onQueryTextChange(String s)
{
if(s.length()>=0) {
String mStart = "";
int mCount = 10;
String[] columnNames = {"_id", "name", "userImage", "location"};
final String[] temp = new String[4];
final MatrixCursor cursor = new MatrixCursor(columnNames);
SearchAPI.getSearchFeed(getApplicationContext(), s, mStart, mCount, mSettingsManager.getInstance().getAccessToken(), new APIResponseListener() {
@Override
public void onResponse(Object response) {
searchResponses= (List<UserVideo>) response;
for (UserVideo searchResponse :searchResponses)
{
searchResponse.setIsVideo(true);
temp[0] = Long.toString(id++);
temp[1] = searchResponse.getCaption();
temp[2] = searchResponse.getUserId();
temp[3] = searchResponse.getLocation();
cursor.addRow(temp);
}
mSearchView.setSuggestionsAdapter(new SearchListAdapter(HomeActivity.this, cursor));
}
@Override
public void onError(VolleyError error) {
if (error instanceof NoConnectionError) {
}
}
});
SearchAPI.getSearchUser(getApplicationContext(), s,mSettingsManager.getInstance().getAccessToken(), new APIResponseListener() {
@Override
public void onResponse(Object response)
{
searchUserResponses= (List<UserVideo>) response;
for (UserVideo searchResponse :searchUserResponses) {
searchResponse.setIsVideo(false);
temp[0] = Long.toString(id++);
temp[1] = searchResponse.getUserName2();
temp[2] = searchResponse.getUserId();
temp[3] = searchResponse.getName();
searchResponses.add(searchResponse);
cursor.addRow(temp);
}
mSearchView.setSuggestionsAdapter(new SearchListAdapter(HomeActivity.this, cursor));
}
@Override
public void onError(VolleyError error)
{
if (error instanceof NoConnectionError) {
}
}
});
}
return true;
}
@Override
public boolean onSuggestionClick(int i)
{
if((searchResponses!=null)&&(searchResponses.get(i).getIsVideo()))
{
UserVideo searchResponse = searchResponses.get(i);
setSearchVideoToShow(searchResponse);
switchFragment(HomeActivity.FRAGMENT_VIDEO_SEARCH, false, "Video Details");
}
else if((searchResponses!=null)&&(!searchResponses.get(i).getIsVideo()))
{
mSingleClickHandle.put(ENABLE_FRAGMENT_SEARCH_VIEW, false);
setUserIdToShow(searchResponses.get(i).getUserId2());
closeDrawer();
switchFragment(HomeActivity.FRAGMENT_PROFILE_VIEW, false, "video");
}
return true;
}
分別調用您的Web服務,並將這些結果放在兩個不同的列表中,然后將這些列表值復制到searchResponses中。
如果類型相等,則可以按以下方式合並結果,
for(int i = 0; i < searchFeedList.size() ; i ++)
{
searchResponses.add(searchFeedList.get(i);
}
int totalSoze = searchFeedList.size() + searchUserList.size();
for(int j = searchFeedList.size(); j < totalSoze.size() ; j ++)
{
searchResponses.add(searchUserList.get(j);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.