이번에는 네트워크를 통하여
github 검색을 하는 것인데
이번 예제의 실행결과는 무조건 실패다.
solution project를 실행시켜도 app 에러가 난다.
다음예제인 T02.05에서 해결이 되는 것이니 TODO 설정을 제대로 한 뒤에 다음 강좌로 넘어가기 바란다.
<!--TODO (1) Add the INTERNET permission-->
AndroidManifest.xml 에 internet을 사용하는 권한 추가
// TODO (2) Call getResponseFromHttpUrl and display the results in mSearchResultsTextView
// TODO (3) Surround the call to getResponseFromHttpUrl with a try / catch block to catch an IOException
MainActivity의 makeGithubSearchQuery method 에서 쿼리조회를 하고 결과를 가져온다.
network을 사용할 때 오류가 날 수 있으니 IOException으로 감싸준다.
import java.io.IOException; ... private void makeGithubSearchQuery() { String githubQuery = mSearchBoxEditText.getText().toString(); URL githubSearchUrl = NetworkUtils.buildUrl(githubQuery); mUrlDisplayTextView.setText(githubSearchUrl.toString());
// TODO (2) Call getResponseFromHttpUrl and display the results in mSearchResultsTextView // TODO (3) Surround the call to getResponseFromHttpUrl with a try / catch block to catch an IOException String githubSearchResults = null; try { githubSearchResults = NetworkUtils.getResponseFromHttpUrl(githubSearchUrl); mSearchResultsTextView.setText(githubSearchResults); } catch (IOException e) { e.printStackTrace(); } } |
---
실행시켜보면 앱이 바로 종료된다.
Lotcat에서 확인해보면
2019-01-13 13:22:41.295 3960-3960/com.example.android.datafrominternet E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.android.datafrominternet, PID: 3960 android.os.NetworkOnMainThreadException at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1448) at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:102) at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:90) at java.net.InetAddress.getAllByName(InetAddress.java:787) at com.android.okhttp.Dns$1.lookup(Dns.java:39) at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:175) at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:141) at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:83) at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:174) at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:126) at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:95) at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:281) at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:224) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:461) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:407) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:244) at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getInputStream(DelegatingHttpsURLConnection.java:210) at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getInputStream(Unknown Source:0) at com.example.android.datafrominternet.utilities.NetworkUtils.getResponseFromHttpUrl(NetworkUtils.java:76) at com.example.android.datafrominternet.MainActivity.makeGithubSearchQuery(MainActivity.java:63) at com.example.android.datafrominternet.MainActivity.onOptionsItemSelected(MainActivity.java:80) at android.app.Activity.onMenuItemSelected(Activity.java:3435) |
로그는 거꾸 읽어가는 것임.
먼저 onMenuItemSelect에서 버튼클릭이 있어났고
onOptionsItemSelectd 에서 어떤버튼인지 확인한 다음.
makeGithubsearchQuery method 에서 NetworkUtils를 호출한다.
그 와중에 getInputStream 에서 최종 에러가 난 것이다.
위 에러가 나면 다음강좌로 넘어간다.
network 사용시에는 동기화라는 것이 필요한데 설정이 되어있지 않아서 발생하는 것임.