2016-08-13 9 views
1

私はYouTubeのプレイリストのリストを取得するアプリケーションを作成しています。以前は動画のリストでしたが、コードを変更しましたが、今ではその方法を無効にすることはできませんでした。非同期タスクはonPostExecuteをオーバーライドさせません(メソッドはスーパークラスのメソッドをオーバーライドしません)

私の理解では、以前のようにVideoではなく新しいPlaylist値で「extend AsyncTask」を変更する必要がありますが、まだ動作しませんでした。

それがあった:

public abstract class GetPlaylistAsyncTask extends AsyncTask<String, Void, Pair<String, List<Video>>> { 

、今は次のとおりです。

public abstract class GetPlaylistAsyncTask extends AsyncTask<String, Void, Pair<String, List<Playlist>>> { 

エラーがある場所です:

mPlaylist = new Playlist(mPlaylistId); 
initAdapter(mPlaylist); 
new GetPlaylistAsyncTask(mYouTubeDataApi, mTitle, mSearchQuery) { 
    @Override 
    public void onPostExecute(Pair<String, List<Playlist>> result) { 
     handleGetPlaylistResult(mPlaylist, result); 
    } 
}.execute(mPlaylist.playlistId, mPlaylist.getNextPageToken()); 

そして、これがAsyncTaskです:

public abstract class GetPlaylistAsyncTask extends AsyncTask<String, Void, Pair<String, List<Playlist>>> { 
    private static final String TAG = "GetPlaylistAsyncTask"; 
    private static final Long YOUTUBE_PLAYLIST_MAX_RESULTS = 50L; 

    private static final String YOUTUBE_VIDEOS_PART = "snippet,contentDetails,statistics"; // video resource properties that the response will include. 
    private static final String YOUTUBE_VIDEOS_FIELDS = "items(id,snippet(title,description,thumbnails/high),contentDetails/duration,statistics)"; // selector specifying which fields to include in a partial response. 

    private YouTube mYouTubeDataApi; 
    private String mTitle; 
    private String mSearchQuery; 

    public GetPlaylistAsyncTask(YouTube api, String title, String searchQuery) { 
     mYouTubeDataApi = api; 
     mTitle = title; 
     mSearchQuery = searchQuery; 
    } 

    @Override 
    protected Pair<String, List<Playlist>> doInBackground(String... params) { 

     SearchListResponse searchResponse; 
     try { 
      YouTube.Search.List search = mYouTubeDataApi.search().list("id,snippet"); 

      search.setKey(ApiKey.YOUTUBE_API_KEY); 
      search.setQ(mTitle + " " + mSearchQuery); 

      search.setType("video"); 
      search.setFields("items(id/kind,id/videoId,snippet/title,snippet/thumbnails/default/url)"); 
      search.setMaxResults(YOUTUBE_PLAYLIST_MAX_RESULTS); 
      searchResponse = search.execute(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
      return null; 
     } 

     if (searchResponse == null) { 
      Log.e(TAG, "Failed to get playlist"); 
      return null; 
     } 

     ArrayList videoIds = new ArrayList(); 

     for (SearchResult item : searchResponse.getItems()) { 
      videoIds.add(item.getId().getVideoId()); 
     } 
     VideoListResponse videoListResponse = null; 
     try { 
      videoListResponse = mYouTubeDataApi.videos() 
        .list(YOUTUBE_VIDEOS_PART) 
        .setFields(YOUTUBE_VIDEOS_FIELDS) 
        .setKey(ApiKey.YOUTUBE_API_KEY) 
        .setId(TextUtils.join(",", videoIds)).execute(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     return new Pair(searchResponse.getNextPageToken(), videoListResponse.getItems()); 
    } 
} 

私のコードで何が間違っているのか分かりませんが、私が正しい方向に向けることができれば感謝します。前もって感謝します!

+2

を@Enzokieためにあなたの答えのためのすべてのおかげで、この記事が言うように「onPostExecuteは」、リターンをdoInBackgroundオブジェクトを受け取り? –

+0

メソッドはスーパークラスのメソッドをオーバーライドしません – emboole

+0

'public'を' protected'に変更 – Enzokie

答えて

2

私はそれを理解しました。

stackoverflow post

を特にあなたがどのようなエラーを得るのですか

0

onPostExecuteは公開されていないため、publicからprotectedに変更してください。

@Override 
    protected void onPostExecute(Pair<String, List<Playlist>> result) { 
     handleGetPlaylistResult(mPlaylist, result); 
    } 
+0

あなたの返信ありがとう!それを変更して再構築すると、エラーはまだ@オーバーライドです – emboole

+1

あなたはチームビューアを持っていますか?私はコードを見ることができます。私のメールで私にメッセージを送ってください。チャットルームhttp://chat.stackoverflow.com/rooms/82392/regular-chatで私はそれを理解したり、私を訪ねようとします。 – Enzokie

関連する問題