Study/Android

T02.04-Exercise-ConnectingToTheInternet

nobang 2019. 1. 13. 14:03
728x90

이번에는 네트워크를 통하여

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 사용시에는 동기화라는 것이 필요한데 설정이 되어있지 않아서 발생하는 것임.

728x90