네이버 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();
}
참고
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
'오류일지' 카테고리의 다른 글
[오류일지]eclipse Tomcat 설치시 Cannot create file, access denied 오류 해결 과정 및 해결 방법 (0) | 2022.06.21 |
---|---|
[안드로이드][프로젝트2] 네이버 검색 API + RecyclerView + CardView+ Hanlder의 postDelayed (0) | 2022.04.06 |
[프로젝트1][오류일지]19. 헤더에 프로필 정보 불러오는 방법 (0) | 2022.03.22 |
[오류일지][프로젝트1]18. 유저 리스트가 안 나왔던 이유 (0) | 2022.03.22 |
[오류일지]17. firebase stroge 쓸 땐 변수를 생성해야지! (0) | 2022.03.19 |