brunch

빠르게 배우는 안드로이드-26 retrofit-json

retrofit,http,android json라이브러리 파싱

by 윤형도

https://brunch.co.kr/@henen/25

강의의 코드에 이어서 시작하겠습니다.

ApiService


public interface ApiService {
public static final String API_URL = "http://jsonplaceholder.typicode.com/";

@GET("comments")
Call<ResponseBody> getComment(@Query("postId") int postId);

@POST("comments")
Call<ResponseBody>getPostComment(@Query("postId") int postId);


//String version
@GET("comments")
Call<ResponseBody> getCommentStr(@Query("postId") String postId);

@FormUrlEncoded
@POST("comments")
Call<ResponseBody>getPostCommentStr(@Field("postId") int postId);


}




MainActivity

public class MainActivity extends AppCompatActivity {
Retrofit retrofit;
ApiService apiService;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

retrofit = new Retrofit.Builder().baseUrl(ApiService.API_URL).build();
apiService = retrofit.create(ApiService.class);

//get
Call<ResponseBody> comment = apiService.getComment(1);
comment.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
try {
Log.v("Test", response.body().string());
} catch (IOException e) {
e.printStackTrace();
}
}

@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {

}
});


}
}


코드를 실행시켜 로그를 확인하면

[

{

"postId": 1,

"id": 1,

"name": "id labore ex et quam laborum",

"email": "Eliseo@gardner.biz",

"body": "laudantium enim quasi est quidem magnam voluptate ipsam eos\ntempora quo necessitatibus\ndolor quam autem quasi\nreiciendis et nam sapiente accusantium"

},

{

"postId": 1,

"id": 2,

"name": "quo vero reiciendis velit similique earum",

"email": "Jayne_Kuhic@sydney.com",

"body": "est natus enim nihil est dolore omnis voluptatem numquam\net omnis occaecati quod ullam at\nvoluptatem error expedita pariatur\nnihil sint nostrum voluptatem reiciendis et"

},

{

"postId": 1,

"id": 3,

"name": "odio adipisci rerum aut animi",

"email": "Nikita@garfield.biz",

"body": "quia molestiae reprehenderit quasi aspernatur\naut expedita occaecati aliquam eveniet laudantium\nomnis quibusdam delectus saepe quia accusamus maiores nam est\ncum et ducimus et vero voluptates excepturi deleniti ratione"

},

{

"postId": 1,

"id": 4,

"name": "alias odio sit",

"email": "Lew@alysha.tv",

"body": "non et atque\noccaecati deserunt quas accusantium unde odit nobis qui voluptatem\nquia voluptas consequuntur itaque dolor\net qui rerum deleniti ut occaecati"

},

{

"postId": 1,

"id": 5,

"name": "vero eaque aliquid doloribus et culpa",

"email": "Hayden@althea.biz",

"body": "harum non quasi et ratione\ntempore iure ex voluptates in ratione\nharum architecto fugit inventore cupiditate\nvoluptates magni quo et"

}

]

다음의 결과가 나옵니다.

이 결과를 JSON Viewer 프로그램이나, 사이트의 뷰어로 확인하면 구조를 쉽게 확인할수 있습니다.

구글에서 jsonViewer로 검색시 제일 처음나오는
http://jsonviewer.stack.hu/

를 이용해 확인해보겠습니다.


Text에 Json 내용을 입력하고


캡처1.PNG

상단의 Viewer 메뉴를 클릭하면 정상적인 JSON 형식일 때 형식을 분석해줍니다.


캡처2.PNG


[] 은 JSON Array(배열)

{}은 JSON Object(객체)입니다.

JSON ARRAY안에 4개의 JSON Object가 있고 JSON Object는 postID,id,name,email,body를 가지고 있는 구조를 확인할수있습니다.


그럼 이제 구조를 확인했으니 안드로이드에서 제공하는 JSON 객체로 읽어보겠습니다.


코드를 먼저 확인해보겠습니다.

try {

String result = response.body().string();
//처음에 배열이므로
Log.v("Test", result);
try {
JSONArray jsonArray = new JSONArray(result);
int postId;
int id;
String name;
String mail;
String body;
for(int i = 0 ; i<jsonArray.length();i++){
//배열이므로 0 번을 가져와보자
JSONObject jsonObject = jsonArray.getJSONObject(i);
postId = jsonObject.getInt("postId");
id = jsonObject.getInt("id");
name = jsonObject.getString("name");
mail = jsonObject.getString("email");
body = jsonObject.getString("body");
Log.v("Test",jsonObject.toString());
}
} catch (JSONException e) {
e.printStackTrace();
}



캡처123213aa.PNG


설명 :

retrofit으로 받아온 json 형식의 string을

JSONARRAY 객체에 넣어줍니다.

JSONArray jsonArray = new JSONArray(result);


jsonArray.length()를 통하여 jsonArray에 몇개의 Object가 있는지 확인할수있습니다.


JsonObject안의 값을 꺼낼려면 정수형이면 getInt() ,실수형이면 getDouble(),문자면 getString() 을 이용하여 꺼낼수있습니다

postId = jsonObject.getInt("postId");
id = jsonObject.getInt("id");
name = jsonObject.getString("name");
mail = jsonObject.getString("email");
body = jsonObject.getString("body");



또한 JsonObject.toString()을 통하여 쉽게 Object의 내용을 확인할수 있습니다.


다음 강의에서는 retrofit과 Gson을 이용하여 더욱 쉽게 JSON 객체를 만들어 보도록 하겠습니다.




keyword
매거진의 이전글빠르게 배우는안드로이드-25  json이란