컴퓨터공부/Android

REST API 사용하기 - GET

achivenKakao 2017. 12. 16. 23:54

요즘에 REST API 소스를 직접 짜는 사람은 적을 것이라고 예상한다. (레트로핏 같은 걸 쓰겠지...?)

그래도 의미가 있지 않을까 해서 정리 해본다.


https://api.github.com 로 접속해서 그 중에 "current_user_url" 항목을 화면에 띄우는 예제이다. 



RestfulAPI.zip



                            


    /*
* 목표
* 1. AsyncTask와 http url connection을 이용한 http 호출 만들기
* 2. 리턴된 json을 파싱하는 방법을 통하여 JSON 객체 다루는 법 습득하기
* 3. json 객체에서 원하는 데이터 빼내서 화면에 출력하기
*
* 작업 순서
* 1. 받을 response를 바탕으로 HubObject를 먼저 만들고
* 2. 통신할 모듈과 파싱할 모듈을 APIClient로 만들고
* 3. APIClient를 감쌀 AsyncTask class를 만든다.
* 4. Main class에서는 AsyncTask를 생성하여 호출하고 데이터를 받는다.
*
* */




 class HubObject {

    private String current_user_url;
private String hub_url;

public String getCurrent_user_url() {
return current_user_url;
}

public void setCurrent_user_url(String current_user_url) {
this.current_user_url = current_user_url;
}

public String getHub_url() {
return hub_url;
}

public void setHub_url(String hub_url) {
this.hub_url = hub_url;
}
}




public class APIClient {
final static String GITURL = "https://api.github.com";

public HubObject getHubObject() {
HubObject obj = new HubObject();

try{
// 통신하고
URL url = new URL(GITURL);
HttpsURLConnection urlConnection = (HttpsURLConnection)url.openConnection();
// urlConnection.setConnectTimeout(30);
// urlConnection.setReadTimeout(30);

InputStream in = new BufferedInputStream(urlConnection.getInputStream());
JSONObject json = new JSONObject(getStringFromInputStream(in));


// json에서 데이터를 가져오는 코드가 존재 해야 함
obj = parseJSON(json);

}catch (MalformedURLException e){
System.err.println("MalformedURLException URL");
e.printStackTrace();

return null;
} catch (IOException e) {
System.err.println("MalformedURLException IO");
e.printStackTrace();

return null;
} catch (JSONException e) {
System.err.println("MalformedURLException JSON");
e.printStackTrace();

return null;
}


return obj;
}

private HubObject parseJSON(JSONObject json) {
HubObject obj = new HubObject();
try {
obj.setCurrent_user_url(json.getString("current_user_url"));
} catch (JSONException e) {
e.printStackTrace();
}

return obj;
}

private String getStringFromInputStream(InputStream is) {

BufferedReader br = null;
StringBuilder sb = new StringBuilder();

String line;
try{
br = new BufferedReader(new InputStreamReader(is));
while( (line = br.readLine()) != null){
sb.append(line);
}
}catch (IOException e) {
e.printStackTrace();
}finally {
if(br != null){
try{
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

return sb.toString();
}

} 




public class AsyncConnection extends AsyncTask{



@Override
public HubObject doInBackground(Object[] objects) {

APIClient apiClient = new APIClient();

HubObject obj = apiClient.getHubObject();

return obj;
}

} 



public class MainActivity extends AppCompatActivity {

/*
* 목표
* 1. AsyncTask와 http url connection을 이용한 http 호출 만들기
* 2. 리턴된 json을 파싱하는 방법을 통하여 JSON 객체 다루는 법 습득하기
* 3. json 객체에서 원하는 데이터 빼내서 화면에 출력하기
*
* 작업 순서
* 1. 받을 response를 바탕으로 HubObject를 먼저 만들고
* 2. 통신할 모듈과 파싱할 모듈을 APIClient로 만들고
* 3. APIClient를 감쌀 AsyncTask class를 만든다.
* 4. Main class에서는 AsyncTask를 생성하여 호출하고 데이터를 받는다.
*
* */

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

AsyncConnection connection = new AsyncConnection();

try{
HubObject obj = (HubObject)connection.execute().get();

TextView tv = (TextView)findViewById(R.id.response);
tv.setText(obj.getCurrent_user_url());

} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}


}

} 




참고 : 

https://code.tutsplus.com/ko/tutorials/android-from-scratch-using-rest-apis--cms-27117

http://bcho.tistory.com/1050