Android AsyncTask 로 JSON Object 받아오기
Android 에서 자주 사용되는 비동기 방식인 AsyncTask 를 통해 서버에서 JSON Object 를 받아와보자.
필수 override 함수인 doInBackground 함수에서 HttpURLConnection 을 통해 JSON Object 를 받아온다.
onPostExecute 함수는 doInBackground 함수가 끝나면 실행되게 된다.
onPreExecute 는 doInBackground 함수가 실행되기 전에 실행되는 override 함수임.
AsyncTask 실행 절차
onPreExecute -> doInBackground -> onPostExecute
AsyncTask 를 통해 받아온 JSON Object 를 직접 처리 해도 되고...
다른 곳에서 받아서 처리해도 된다.
다른 곳에서 받아서 처리하려면 interface 를 하나 만들어서 처리하면 되겠지.
요놈을 만들어 놓고 사용하는 방법은
GetJSONObjectTask task = new GetJSONObjectTask();
task.execute(url);
값을 주고 받는게 많으면... 생성자나 set/get 을 이용해서 처리하면 됨.
private class GetJSONObjectTask extends AsyncTask<URL, Void, JSONObject> {
@Override
protected JSONObject doInBackground(URL.. params) {
HttpURLConnection con = null;
try {
con = (HttpURLConnection)params[0].openConnection();
int response = con.getResponseCode();
if (response == HttpURLConnection.HTTP_OK) {
StringBuilder builder = new StringBuilder();
try (BufferedReader reader = new BufferedReader(
new InputStreamReader(con.getInputStream()))) {
String line;
while ((line = reader.readLine()) != null) {
builder.append(line);
}
} catch (IOException e) {
e.printStackTrace();
}
return new JSONObject(builder.toString());
} else {
Log.e(TAG, "Connection Error!");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
con.disconnect();
}
return null;
}
@Override
protected void onPostExecute(JSONObject jsonObject) {
// TODO Something with jsonObject
}
}