簡體   English   中英

將數據追加到列表

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

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