Я пытаюсь использовать YouTube Data API
. Они создали Java-клиент. Here is the sample, который я попытался выполнить, чтобы отправить запрос на их серверы. У меня не может бытьAsyncTask doInBackground() возвращает null
// Call the API and print results.
SearchListResponse searchResponse = search.execute();
List<SearchResult> searchResultList = searchResponse.getItems();
в главной теме, потому что Android не разрешает сетевое взаимодействие по основному потоку. Поэтому я попытался использовать AsyncTask
public class youtubeSearchTask extends AsyncTask<YouTube.Search.List, Void, SearchListResponse> {
@Override
protected SearchListResponse doInBackground(YouTube.Search.List... params) {
SearchListResponse a;
try {
a = params[0].execute();
} catch (java.io.IOException ioe) {
ioe.printStackTrace();
}
return a;
}
@Override
protected void onPostExecute(SearchListResponse searchResponse) {
List<SearchResult> searchResultList = searchResponse.getItems();
List<String> videoIds = new ArrayList<String>();
if (searchResultList != null) {
// Merge video IDs
for (SearchResult searchResult : searchResultList) {
videoIds.add(searchResult.getId().getVideoId());
}
Joiner stringJoiner = Joiner.on(',');
String videoId = stringJoiner.join(videoIds);
// Call the YouTube Data API's youtube.videos.list method to
// retrieve the resources that represent the specified videos.
try {
YouTube.Videos.List listVideosRequest = youtube.videos().list("snippet, statistics").setId(videoId);
new videoSearchTask().execute(listVideosRequest);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Я попытался
return params[0].execute();
внутри метода doInBackground
, но это заставило меня объяснить возможной IOException
. Поэтому я изменил код, и теперь он говорит variable 'a' might not have been initialized
. Что я делаю?