2015-05-19 23 views
-2

我正在嘗試創建收藏夾類。我搜索我從用戶處獲得的標題並將視頻添加到收藏夾類。但是,我總是得到不止一個結果。 (我得到的最大結果是10)。 我怎樣才能得到每個標題只有1個結果?獲得太多結果

這是上創建:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.favorites_layout); 
    getSupportActionBar().setTitle("Favorites"); 
    initializeViews(); 

    extras = getIntent().getExtras(); 
    this.vidTitle = extras.getString("title"); 
    this.vidID = extras.getString("id"); 
    //Checking where to add the new Video 
    for(int i=0;i<favorites.length;i++){ 
     if(favorites[i]==null){ 
      favorites[i] = vidTitle; 
     } 
     break; // Break so it won't add same video to all array 
    } 
    AppUtils.showToast("Loading Favorites"); 
    getVideo2(); 
} 

這是得到10個結果代碼:

public void getVideo(){ 
    AppUtils.showToast("Loading Favorites"); 
    mServiceTask = new ServiceTask(SEARCH_VIDEO); 
    mServiceTask.setmServerResponseListener(this); 
    for (int i=0; i<favorites.length;i++) { 
     if(favorites[i]!=null){ 
      mServiceTask.execute(new Object[]{favorites[i]}); <--- Problem here 
      break; 
     } 
     else{ 
      break; 
     } 
    } 
} 

ServiceTask:

public class ServiceTask extends AsyncTask<Object, Void, Object[]> implements ServiceTaskInterface{ 
private static final String TAG = ServiceTask.class.getSimpleName(); 
private ServerResponseListener mServerResponseListener = null; 
private int mRequestCode = 0; 

public void setmServerResponseListener(ServerResponseListener mServerResponseListener){ 
    this.mServerResponseListener = mServerResponseListener; 
} 

public ServiceTask(int iReqCode){ 
    mRequestCode = iReqCode; 
} 

@Override 
protected void onPreExecute() { 
    super.onPreExecute(); 
    mServerResponseListener.prepareRequest(mRequestCode); 
} 

@Override 
protected Object[] doInBackground(Object... params) { 
    if(params == null) 
     throw new NullPointerException("Parameters to the async task can never be null"); 
    mServerResponseListener.goBackground(); 
    Object[] resultDetails = new Object[2]; 
    resultDetails[0] = mRequestCode; 

    switch (mRequestCode){ 
     case AppConstants.SEARCH_VIDEO: 
      try { 
       resultDetails[1] = loadVideos((String) params[0]); 
       break; 
      }catch (Exception e){ 
       AppUtils.showToast("BLABLABLA");} 

    } 
    return resultDetails; 
} 

@Override 
protected void onPostExecute(Object[] result) { 
    super.onPostExecute(result); 
    mServerResponseListener.completedRequest(result); 
} 
//Loading the videos, with help of Google's code. 
private List<SearchResult> loadVideos(String queryTerm){ 
    try{ 
     YouTube youTube = new YouTube.Builder(transport,jsonFactory,new HttpRequestInitializer() { 
      @Override 
      public void initialize(HttpRequest httpRequest) throws IOException {} 
     }).setApplicationName(YoutubeApplication.appName()).build(); 
     YouTube.Search.List search = youTube.search().list("id,snippet"); 
     search.setKey(AppConstants.KEY); 
     search.setQ(queryTerm); 

     //Only including videos 
     search.setType("video"); 

     search.setFields("items(id/kind,id/videoId,snippet/title,snippet/description,snippet/thumbnails/default/url,snippet/thumbnails/medium/url)"); 
     search.setMaxResults(AppConstants.NUMBER_OF_VIDEOS_RETURNED); 

     //Call the API to print results 
     SearchListResponse searchListResponse = search.execute(); 
     List<SearchResult> searchResultList = searchListResponse.getItems(); 
     if(searchResultList != null){ 
      return searchResultList; 
     } 
    }catch (GoogleJsonResponseException e){ 
     System.err.println("There was a service error: " + e.getDetails().getCode() + " : " 
       + e.getDetails().getMessage()); 
    }catch (IOException e){ 
     System.err.println("There was an IO error: " + e.getCause() + " : " + e.getMessage()); 
    }catch (Throwable t){ 
     t.printStackTrace(); 
    } 
    return null; 
} 

}

哪有我只得到1 r但是仍然有10個結果的位置(比如10個不同的視頻)?

回答

0

首先,評論你的break;行或你的循環是無用的。然後收集列表中的非空對象,並將其與toArray一起放入execute方法中。

LinkedList<Object> list = new LinkedList<Object>(); 
    for (int i=0; i<favorites.length; i++) { 
     if(favorites[i]!=null){ 
      //mServiceTask.execute(new Object[]{favorites[i]}); //<--- Problem here 
      list.add(favorites[i]); 
      //break; 
     } 
     else{ 
      //break; 
     } 
    } 
    mServiceTask.execute(list.toArray()); 

UPDATE

而關於ServiceTask類。在doInBackground中,您僅使用params[0] - 第一個數組元素。所以應該是:

for (int i=0; i<params.length; i++) { 
    loadVideos((String) params[i]); 
} 
+0

謝謝,但列表保留爲空,出於某種原因。我編輯了更多信息的帖子。 – JustAQuestion

+0

什麼名單?它是空的還是空的? – Ircover

+0

我修復了這個問題,但仍然得到了1個視頻的10個結果。我想一次得到1個結果爲不同的視頻..問題是mServiceTask.execte返回10個結果。我怎麼能限制它,或者至少,比較結果的id到我需要的id? – JustAQuestion