Androiddd

Android AsyncTask 로 JSON Object 받아오기

Prod. No. 7 2016. 9. 6. 11:08

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

}

}