2015-05-19 4 views
-2

Я пытаюсь создать класс избранного. Я ищу название, которое я получаю от пользователя, и добавляет видео в класс Favorites. Но я всегда получаю больше одного результата. (Я получаю максимальные результаты, равные 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 esult вовремя, но все еще есть место для 10 результатов (например, 10 разных видео)?

ответ

0

Сначала прокомментируйте свои строки break; или ваш цикл бесполезен. Затем собирайте не нулевые объекты в списке и поместите его в метод execute с toArray.

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

Я исправил его, но все же, я получаю 10 результатов для 1 видео. Я хочу получить 1 результат за раз для разных видеороликов. Проблема заключается в том, что mServiceTask.execte возвращает 10 результатов. Как я могу ограничить это или, по крайней мере, сравнить идентификатор результатов с идентификатором, который мне нужен? – JustAQuestion

Смежные вопросы