오류일지
[안드로이드][프로젝트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();
}
참고
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