이번에는 동기화를 진행하여 네트워크를 통한 조회결과를 가져오는 부분이다.
// TODO (1) Create a class called GithubQueryTask that extends AsyncTask<URL, Void, String>
// TODO (2) Override the doInBackground method to perform the query. Return the results. (Hint: You've already written the code to perform the query)
// TODO (3) Override onPostExecute to display the results in the TextView
MainActivity 에 inner class로 GithubQueryTask를 추가
GithubQueryTask의 doInBackground method에서 쿼리를 날리고 결과를 받는다.
GithubQueryTask의 onPostExecute method에서 가져온 결과를 TextView에 보여준다.
import android.os.AsyncTask; ... // TODO (1) Create a class called GithubQueryTask that extends AsyncTask<URL, Void, String> public class GithubQueryTask extends AsyncTask<URL, Void, String> {
// TODO (2) Override the doInBackground method to perform the query. Return the results. (Hint: You've already written the code to perform the query) @Override protected String doInBackground(URL... params) { URL searchUrl = params[0]; String githubSearchResults = null; try { githubSearchResults = NetworkUtils.getResponseFromHttpUrl(searchUrl); } catch (IOException e) { e.printStackTrace(); } return githubSearchResults; }
// TODO (3) Override onPostExecute to display the results in the TextView @Override protected void onPostExecute(String githubSearchResults) { if (githubSearchResults != null && !githubSearchResults.equals("")) { mSearchResultsTextView.setText(githubSearchResults); } } } |
// TODO (4) Create a new GithubQueryTask and call its execute method, passing in the url to query
makeGithubSearchQuery 에서 쿼리를 날릴 때 변경한 GithubQueryTask를 사용하도록 한다.(기존것은 주석처리)
// String githubSearchResults = null; // try { // githubSearchResults = NetworkUtils.getResponseFromHttpUrl(githubSearchUrl); // mSearchResultsTextView.setText(githubSearchResults); // } catch (IOException e) { // e.printStackTrace(); // } // TODO (4) Create a new GithubQueryTask and call its execute method, passing in the url to query new GithubQueryTask().execute(githubSearchUrl); |
App을 실행시켜서 'queen'이라는 단어로 쿼리를 날리면
먼저 url을 화면에 보여주고 잠시 후에 쿼리 결과가 나타난다.
네트워크를 통한 요청을 했을 때 응답을 받을 때까지 대기하도록 해야하기 때문임.
응답받기전에 결과를 처리하려고 한 T02.04는 에러가 날 수 밖에 없음.