열심히 검색해보니
MainThread에서 발생하는 에러이다!
안드로이드에서 네트워크를 통해 데이터를 받을 때
MainThread에서 이용하면 이 오류가 발생한다
따라서 별도의 Thread를 만들어서 데이터를 받아야한다
getWeatherData.java
public void getWeatherData() {
StringBuilder urlBuilder = new StringBuilder(BASE_URL);
try {
urlBuilder.append("?" + URLEncoder.encode("q", "UTF-8") + "=Seoul");
urlBuilder.append("&" + URLEncoder.encode("appid", "UTF-8") + "=" + apiKey);
urlBuilder.append("&" + URLEncoder.encode("units", "UTF-8") + "=metric");
RestTemplate restTemplate = new RestTemplate();
response = restTemplate.getForObject(urlBuilder.toString(), OpenWeather.class);
System.out.println("response >>> "+response);
} catch (Exception e) {
e.printStackTrace();
System.out.println("exception >>> ("+urlBuilder+")");
}
}
최근 만들고 있는 날씨 어플에서
api로 받은 데이터가 안받아져서 고생 좀 했다..
물론 지금은 다른 오류로 고생중이지만..^^
위 코드처럼 작성하니 NetworkOnMainThreadException 오류가 떴고
아래처럼 thread를 넣어 수정해주니 정상작동하였다
new Thread(){
public void run(){
RestTemplate restTemplate = new RestTemplate();
response = restTemplate.getForObject(urlBuilder.toString(), OpenWeather.class);
System.out.println("response >>> "+response);
}
}.start();
다음 오류도 얼른 해결해서 올릴 수 있길..
5시간 넘게 그것만했는데ㅠㅠ
참고: https://hgko1207.github.io/2020/07/31/java-dev-3/
(좋은 소스 주셔서 감사합니다ㅎㅎ)