https://github.com/lnjky/fashion_people
GitHub - lnjky/fashion_people: 패션 추천 어플
패션 추천 어플. Contribute to lnjky/fashion_people development by creating an account on GitHub.
github.com
코드 전체를 보려면 위에 링크를 통해 확인할 수 있습니다.
[안드로이드] 기상청 단기예보 API 사용하기 - 1
https://github.com/lnjky/fashion_people GitHub - lnjky/fashion_people: 패션 추천 어플 패션 추천 어플. Contribute to lnjky/fashion_people development by creating an account on GitHub. github.com 코드 전체를 보려면 위에 링크를 통해
loasd.tistory.com
[안드로이드] 기상청 단기예보 API 사용하기 - 2
https://github.com/lnjky/fashion_people GitHub - lnjky/fashion_people: 패션 추천 어플 패션 추천 어플. Contribute to lnjky/fashion_people development by creating an account on GitHub. github.com 코드 전체를 보려면 위에 링크를 통해
loasd.tistory.com
이전의 과정을 거쳤다면 마지막 단계이다.
우선 WeatherData에 들어갈 변수들을 확인하자.
public String lookUpWeather(String date, String time, String nx, String ny) throws IOException, JSONException {
String date, String time, String nx, String ny
이렇게 4가지 값들이 변수로 입력된다.
이 4가지 변수들을 액티비티에서 입력해주면 원하는 데이터들을 받아올수 있다.
우선 날짜부터 확인하도록 하자.
1) date
날짜를 받아오기 위해 SimpleDateFormat형식을 사용하였다.
이에 대한 자세한 내용은 아래의 링크를 통해 확인 가능하다.
[안드로이드] SimpleDateFormat
https://github.com/lnjky/fashion_people GitHub - lnjky/fashion_people: 패션 추천 어플 패션 추천 어플. Contribute to lnjky/fashion_people development by creating an account on GitHub. github.com 코드 전체를 보려면 위에 링크를 통해
loasd.tistory.com
날짜를 입력하기 위해 작성한 코드는 다음과 같다.
long now = System.currentTimeMillis();
Date mDate = new Date(now);
SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyyMMdd");
String getDate = simpleDateFormat1.format(mDate);
날짜의 경우 20220105 이런형식으로 입력되어야 하기 때문에 형식을 "yyyyMMdd"로 설정하였다.
2) time
시간도 date와 같이 SimpleDateFormat을 사용하였다.
작성한 코드는 다음과 같다.
long now = System.currentTimeMillis();
Date mDate = new Date(now);
SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("HH");
String getTime = simpleDateFormat2.format(mDate) + "00";
시간의 형식을 0200 / 0500 이런 형식으로 입력해줘야 하기 때문에 "HH"형식으로 받아오고 뒤에 00을 붙여주었다.
3) nx, ny
x좌표와 y좌표를 받아와야 한다.
이를 사용하기 위해서는 GPS를 사용해야 하기 때문에 아래의 링크에서 코드를 받아와서 위도 경도를 받아왔다.
https://webnautes.tistory.com/1315
Android 예제 - 현재 위치 주소 가져오기(Get current location without google map)
LocationManager와 Geocoder를 사용하여 현재 위치에 대한 주소를 가져오는 예제입니다. 구글맵을 사용하지 않고 현재 위치를 가져오는 방법입니다. 2019. 3. 3 - 최초작성2019. 11. 21 - androidx로 변경 다음
webnautes.tistory.com
자세한 내용은 링크를 통해 확인하면 된다.
x, y값을 받아오는 과정은 이렇다.
GPS를 통해 현재 위치의 위도, 경도를 받아오고 이를 지오코더를 통해 현재 위치의 주소로 전환해준다.
그리고 변환된 주소를 readExcel을 통해 격자값으로 변환해주면 된다
이 과정을 거친 격자값을 기장청 단기예보 API에 입력해주면 된다.
우선 과정을 살펴보도록 하자.
여기서 받은 참고문서에 local_name.xls파일이 있는데 이거로 값을 받아올 수 있다.
이를 안드로이드 스튜디오 안에 넣어주고 엑셀파일을 읽을 준비를 한다.
이에 대한 과정은 아래의 링크를 통해 확인할 수 있다.
[안드로이드] 엑셀파일 읽기
https://github.com/lnjky/fashion_people GitHub - lnjky/fashion_people: 패션 추천 어플 패션 추천 어플. Contribute to lnjky/fashion_people development by creating an account on GitHub. github.com 코드 전체를 보려면 위에 링크를 통해
loasd.tistory.com
위의 과정을 통해 x,y값을 받아온다.
이러면 모든 변수를 얻는데 성공했다.
이를 함수를 통해 입력해주면 된다.
// WeatherData에서 return한 데이터를 가져오는 구문
WeatherData wd = new WeatherData();
try {
date = getDate;
time = getTime;
weather = wd.lookUpWeather(date, time, x, y);
} catch (IOException e) {
Log.i("THREE_ERROR1", e.getMessage());
} catch (JSONException e) {
Log.i("THREE_ERROR2", e.getMessage());
}
이렇게 작성하면 설정한 대로 값을 받아올 수 있다.
그런데 여기서 문제점이 있다.
WeatherData.java를 통해 여러 데이터를 가져와야 하는데 리턴은 1개밖에 되지 않는다.
그래서 이런 방법을 사용하였다.
return sky + rain + temperature + wind + snow + humidity;
예시의 코드는 구름의 양, 강우량, 기온, 바람, 적설량, 습도이렇게 총 6가지 변수들에 대한 값을 받아온다.
이걸 전부 String으로 다 이어서 전송해준다.
그러면 이렇게 전송될 것이다.
String weather = 구름의양 강우량 기온 바람 적설량 습도
// return한 값을 " " 기준으로 자른 후 배열에 추가
// array[0] = 구름의 양, array[1] = 강수 확률, array[2] = 기온, array[3] = 풍속, array[4] = 적설량, array[5] = 습도
String[] weatherarray = weather.split(" ");
for(int i = 0; i < weatherarray.length; i++) {
Log.d("weather = ", i + " " + weatherarray[i]);
}
이렇게 띄어쓰기를 기준으로 문자열을 잘라주고 이를 배열에 저장해준다.
Log.d를 통해 값이 제대로 들어와있는지 확인할 수 있다.
이렇게 데이터들이 잘 들어와 있는 것을 확인할 수 있다.
이렇게 들어온 데이터들은
tv_cloud.setText("구름 양 : " + weatherarray[0]);
이런식으로 setText를 통해 작성할 수도 있고
if(sunrise <= Integer.valueOf(time) && Integer.valueOf(time) < sunset) {
if((weatherarray[0].equals("맑음")) && (weatherarray[4].equals("적설없음"))) {
weather_image.setImageDrawable(iv_sun);
}
특정 조건에 따라 setImageDrawbale을 통해 이미지를 세팅해줄 수도 있다.
내용을 좀 길게 작성하게 되었는데 작성하는 중 빠진 부분이나 오타,오류가 있는 부분은 지적해주시면 수정하도록 하겠습니다.
'안드로이드' 카테고리의 다른 글
[안드로이드] 갤러리에서 이미지 가져오기 (0) | 2023.01.09 |
---|---|
[안드로이드] Glide 라이브러리 (0) | 2023.01.06 |
[안드로이드] 기상청 단기예보 API 사용하기 - 2 (0) | 2023.01.06 |
[안드로이드] 기상청 단기예보 API 사용하기 - 1 (0) | 2023.01.06 |
[안드로이드] 댓글 작성 만들기 (0) | 2023.01.05 |