오류일지

[안드로이드][프로젝트2] android.os.NetworkOnMainThreadException 오류나는 이유

devRobin 2022. 4. 5. 14:45

네이버 API 연결하다가 android.os.NetworkOnMainThreadException 오류가 났다.

위 에러는 안드로이드의 기본 activity에서 network 관련 API를 직접 사용했을때 발생한다.

 

 

해결방법

thread를 이용하자!

 

내가 만든 함수는 다음과 같다.

public void searchNaver(final String searchObject) { // 검색어 = searchObject로 ;
        final String clientId = "클라이언트 아이디값";//애플리케이션 클라이언트 아이디값";
        final String clientSecret = "클라이언트 시크릿값";//애플리케이션 클라이언트 시크릿값";
        final int display = 5; // 보여지는 검색결과의 수

        // 네트워크 연결은 Thread 생성 필요
        new Thread() {

            @Override
            public void run() {
                try {
                    String text = URLEncoder.encode(searchObject, "UTF-8");
                    String apiURL = "https://openapi.naver.com/v1/search/book?query=" + text + "&display=" + display + "&"; // json 결과
                    // Json 형태로 결과값을 받아옴.
                    URL url = new URL(apiURL);
                    HttpURLConnection con = (HttpURLConnection) url.openConnection();
                    con.setRequestMethod("GET");
                    con.setRequestProperty("X-Naver-Client-Id", clientId);
                    con.setRequestProperty("X-Naver-Client-Secret", clientSecret);
                    con.connect();

                    int responseCode = con.getResponseCode();


                    BufferedReader br;
                    if(responseCode==200) { // 정상 호출
                        br = new BufferedReader(new InputStreamReader(con.getInputStream()));

                    } else {  // 에러 발생
                        br = new BufferedReader(new InputStreamReader(con.getErrorStream()));
                    }

                    StringBuilder searchResult = new StringBuilder();
                    String inputLine;
                    while ((inputLine = br.readLine()) != null) {
                        searchResult.append(inputLine + "\n");

                    }
                    br.close();
                    con.disconnect();

                    String data = searchResult.toString();
                    String[] array;
                    array = data.split("\"");
                    String[] title = new String[display];
                    String[] link = new String[display];
                    String[] image = new String[display];
                    String[] publisher = new String[display];
                    String[] description = new String[display];

                    int k = 0;
                    for (int i = 0; i < array.length; i++) {
                        if (array[i].equals("title"))
                            title[k] = array[i + 2];
                        if (array[i].equals("link"))
                            link[k] = array[i + 2];
                        if (array[i].equals("image"))
                            image[k] = array[i + 2];
                        if (array[i].equals("publisher"))
                            publisher[k] = array[i + 2];
                        if (array[i].equals("description")) {
                            description[k] = array[i + 2];
                            k++;
                        }
                    }

                    Log.d(TAG, "0번째: " + title[0] + " link: "+ link[0] + " image: "+image[0] +" publisher: "+ publisher[0] +" desc: "+ description[0]);


                } catch (Exception e) {
                    Log.d(TAG, "error : " + e);
                }

            }
        }.start();

    }

 

 

참고

https://pickersoft.net/entry/androidosNetworkOnMainThreadException-%EA%B0%80%EC%9E%A5-%EC%89%BD%EA%B2%8C-%ED%95%B4%EA%B2%B0%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95

 

android.os.NetworkOnMainThreadException 가장 쉽게 해결하는 방법

android.os.NetworkOnMainThreadException 에러 해결방법만 원하시는 분은 3번으로 넘어가세요 ^^ 1. 개념. -. 안드로이드를 개발하다보면 android.os.NetworkOnMainThreadException 라는 에러메시지를 보곤한다...

pickersoft.net

https://hyongdoc.tistory.com/167

 

[안드로이드] 네이버 검색 API 사용 예제

이번 포스팅에서는 네이버 검색 API를 안드로이드에서 사용하는 방법에 대해 알아보자. 네이버 검색 API란? 블로그나 지역 검색 등 네이버에서 주로 사용하는 검색 정보를 띄워주는 API이다. 최근

hyongdoc.tistory.com