날씨 정보를 받을 싸이트
정보를 받으려면 API Key 를 사용해야 함. 내 API Key 받는 곳
http://openweathermap.org/appid#get
API Key 관련 update 된 Sunshine 소스 코드
https://github.com/udacity/Sunshine-Version-2
https://docs.google.com/document/d/1e8LXahedBlCW1_dp_FyvQ3ugUAwUBJDuJCoKf3tgNVs/pub?embedded=true
Permission과 Privacy 에 대한 정보
https://developer.android.com/preview/features/runtime-permissions.html
Open weather map 싸이트로 부터 날씨 정보 받는 신택스
api.openweathermap.org/data/2.5/weather?q=London,uk&APPID={APIKEY}
날씨정보는 우편번호, 도시 이름 등으로 받을 수 있다. i.e. 55347, USA
7일치 날씨 정보를 볼 수 있는 곳
http://openweathermap.org/forecast
16일치 날씨 정보
http://openweathermap.org/forecast#16days
Weather 에 대한 HTTP Request 하기
1. HTTP Request 만들기 : HttpURLConnection
2. input stream 으로부터 response 읽기 : BufferedReader , InputStream
3. 로그 만들기
https://gist.github.com/udacityandroid/d6a7bb21904046a91695
// These two need to be declared outside the try/catch
// so that they can be closed in the finally block.
HttpURLConnection urlConnection = null;
BufferedReader reader = null;
// Will contain the raw JSON response as a string.
String forecastJsonStr = null;
try {
// Construct the URL for the OpenWeatherMap query
// Possible parameters are avaiable at OWM's forecast API page, at
// http://openweathermap.org/API#forecast
URL url = new URL("http://api.openweathermap.org/data/2.5/forecast/daily?q=94043&mode=json&units=metric&cnt=7");
// Create the request to OpenWeatherMap, and open the connection
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.connect();
// Read the input stream into a String
InputStream inputStream = urlConnection.getInputStream();
StringBuffer buffer = new StringBuffer();
if (inputStream == null) {
// Nothing to do.
return null;
}
reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = reader.readLine()) != null) {
// Since it's JSON, adding a newline isn't necessary (it won't affect parsing)
// But it does make debugging a *lot* easier if you print out the completed
// buffer for debugging.
buffer.append(line + "\n");
}
if (buffer.length() == 0) {
// Stream was empty. No point in parsing.
return null;
}
forecastJsonStr = buffer.toString();
} catch (IOException e) {
Log.e("PlaceholderFragment", "Error ", e);
// If the code didn't successfully get the weather data, there's no point in attemping
// to parse it.
return null;
} finally{
if (urlConnection != null) {
urlConnection.disconnect();
}
if (reader != null) {
try {
reader.close();
} catch (final IOException e) {
Log.e("PlaceholderFragment", "Error closing stream", e);
}
}
}
return rootView;
}
}
}
소스 코드 분석
우선 HttpURLConnection과 BufferedReader 변수를 선언한다.
이렇게 하면 나중에 finally block 에서 connection을 해제 할 수 있다.
그리고 날씨 정보를 요청할 쿼리를 담을 String 변수도 try 만 밖에 선언한다.
try 문 안에서는 날씨를 요청할 쿼리 (URL)을 URL 변수에 담는다.
그리고 아까 만들어 놨던 HttpURLConnection 변수 (urlConnection)를 사용해서 connection을 open 하고 Request Method를 GET으로 선언하고 실제로 connect 한다.
이제 URL을 String에 넣는 작업을 한다.
먼저 URL 을 InputStream 변수에 넣은 다음에 처음에 만들어 놨던 BufferedReader 변수(reader) 에 이 InputStream 을 담는다.
그리고 이 reader를 while 문을 통해 StringBuffer 에 담는다.
마지막으로 try문 밖에서 선언했던 String 변수 (forecastJsonStr) 에 이 StringBuffer (buffer)의 내용을 담는다.
이렇게 하면 URL 형식의 날씨 요청 쿼리를 사용해서 connection을 열고 이 쿼리를 String 변수에 담는 것까지 완료 됐습니다.
catch 문에는 Exception이 발생 했을 경우 Log를 남기고 null을 return 하도록 하구요.
Exception이 있던 없던 실행되는 finally 구문에서는 urlConnection을 disconnect 합니다.
그리고 BurreredReader 도 close 하구요.
새로 추가할 소스 분석은 여기까지구요.
참고로 HTTP 연결은 HTTPUrlConnection 과 HttpClient 두개 다 사용 가능한다. HTTPUrlConnection을 추천한답니다.
https://developer.android.com/training/basics/network-ops/connecting.html
http://android-developers.blogspot.com/2011/09/androids-http-clients.html?_sm_au_=iRVfk4LV6Z6647f6
Android Studio에는 로그를 볼 수 있는 Logcat이 있는데요.
Android Studio의 안드로이드 아이콘을 클릭하면 DDMS가 실행되고 이 DDMS 안에 LogCat 창이 있습니다.
Log Level은 아래와 같습니다.
- ERROR
- WARN
- INFO
- DEBUG
- VERBOSE
다음 글에서는 위의 새로운 소스 코드를 실제로 파일에 추가하고 refactoring 하고 실행해 보는 것 까지 할 것 같습니다.
'WEB_APP > Android' 카테고리의 다른 글
Udacity 강좌 - Lesson 2 실습 05 (2) | 2016.08.29 |
---|---|
Udacity 강좌 - Lesson 2 실습 04 - 2과 완성 코드 실행 - (0) | 2016.08.23 |
Udacity 강좌 - Lesson 2 실습 03 (0) | 2016.08.17 |
Udacity 강좌 - Lesson 2 실습 02 (0) | 2016.08.16 |
Android Network Connection (0) | 2016.08.11 |
Udacity 강좌 - Developing Android Apps Lesson 2 Summary (0) | 2016.08.09 |
Udacity 강좌 - Lesson 1 실습 (0) | 2016.08.08 |
Udacity 강좌 - Developing Android Apps Lesson 1 Summary (1) | 2016.07.22 |
안드로이드 앱 스트레스 테스팅 툴 Monkey Exerciser (0) | 2016.03.25 |
[CookBook] Fragments 이해하기 -10- (0) | 2013.10.02 |