brunch

You can make anything
by writing

C.S.Lewis

by 윤형도 Apr 26. 2017

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

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

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 내용을 입력하고


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



[] 은 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();
    }




설명 :

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 객체를 만들어 보도록 하겠습니다.




매거진의 이전글 빠르게 배우는안드로이드-25  json이란
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari