'Android'에 해당되는 글 31건
- 2018.09.14 Kakao REST API 로컬 연동 1
Kakao(Daum) API 를 이용하여 좌표 -> 주소로 변환하는 기능의 요구가 있어서 개발 겸 정리
JSON에서 주소 외의 데이터는 필요 없어서 바로 가져와서 처리함
Retrofit 으로 개발하다가 AsyncTask 방식으로도 만들어봄.
* Kakao에서 제공하는 REST API
GET /v2/local/geo/coord2address.{format} HTTP/1.1
Host: dapi.kakao.com
Authorization: KakaoAK {app_key}
1. AsyncTask 방식
class AddrHelper {
private static final String KAKAO_REST_API = "http://dapi.kakao.com/v2/local/geo/coord2address.json?x=%s&y=%s&input_coord=%s";
private class KakaoGetRESTApi extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(String... strings) {
String temp = "Not Gained";
try{
temp = GET(strings[0], strings[1], strings[2]);
return temp;
}catch(IOException e) {
e.printStackTrace();
}
return temp;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
Log.d("TASK", "POST " + s);
}
}
public String run(String x, String y, String key) throws ExecutionException, InterruptedException {
return new KakaoGetRESTApi().execute(x,y,key).get().replace("\"", "");
}
private String GET(String x, String y, String key) throws IOException{
String myUrl = String.format(KAKAO_REST_API, x, y, "WGS84");
Log.d("REST GET", "REQUEST URL = " + myUrl);
InputStream inputStream = null;
String returnString = "";
String returnValue = "";
int length = 1024;
try{
URL url = new URL(myUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestProperty("Authorization", "KakaoAK "+key);
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("charset", "utf-8");
conn.setReadTimeout(10000);
conn.setConnectTimeout(15000);
conn.setRequestMethod("GET");
conn.setDoInput(true);
conn.connect();
int response = conn.getResponseCode();
Log.d("REST GET", "The response is : " + response);
inputStream = conn.getInputStream();
JsonObject json = new JsonParser().parse(new InputStreamReader(inputStream, "UTF-8")).getAsJsonObject();
json.getAsJsonArray("documents").get(0).getAsJsonObject().getAsJsonObject("address").getAsJsonPrimitive("address_name").toString();
returnValue = json.getAsJsonArray("documents").get(0).getAsJsonObject().getAsJsonObject("address").getAsJsonPrimitive("address_name").toString();
Log.d("REST GET", "The response is : " + returnValue);
}catch (Exception e){
Log.e("REST GET", "Error : "+e.getMessage());
}finally {
if(inputStream != null)
inputStream.close();
}
return returnValue;
}
}
2. retrofit 방식
private interface ApiService{
String base = "http://dapi.kakao.com/";
String key = "XXXXXXXXXXXXXXXXXXXXXXXXXXX";
@GET("v2/local/geo/coord2address.json")
Call<JsonObject> getAddress(@Header("Authorization") String key, @Query("x") String lon, @Query("y") String lat, @Query("input_coord") String type);
}
Retrofit retrofit = new Retrofit.Builder().addConverterFactory(GsonConverterFactory.create())
.baseUrl(ApiService.base)
.build();
ApiService api = retrofit.create(ApiService.class);
Call<JsonObject> call = api.getAddress(key, lon, lat, type);
//이후 JsonObject를 통해서 데이터 긁어오기
'Android > etc' 카테고리의 다른 글
다중 언어 및 해상도를 위한 리소스 폴더명 (0) | 2018.10.12 |
---|---|
암호화 적용 MessageDigest (0) | 2018.09.14 |
화면 회전을 센서로 체크하기. (0) | 2018.05.17 |
Android VLC Compile (0) | 2018.02.06 |
화면 코드로 회전 시키기 (0) | 2018.01.23 |