ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [안드로이드] Retrofit GET 방식 간단 예제 2
    안드로이드(java)/기능 관련 2019. 11. 14. 22:30

    GET 방식 예제에서는 query string을 요청하지 않고 그냥 통으로 다 요청했었습니다. 그래서 posts의 모든 내용을 받아와서 화면에 출력해 주었었죠.

    이번에는 통으로 요청이 아니라 원하는 userId 를 지정해서 그 값만 받아 오도록 하겠습니다.

    아래의 내용처럼 전체 내용 중 userId 4 에 대한 것만 받아오는 것이죠.

     

    [받아올 내용]

    [ { "userId": 4, "id": 31, "title": "ullam ut quidem id aut vel consequuntur", "body": "debitis eius sed quibusdam non quis consectetur vitae\nimpedit ut qui consequatur sed aut in\nquidem sit nostrum et maiores adipisci atque\nquaerat voluptatem adipisci repudiandae" }, { "userId": 4, "id": 32, "title": "doloremque illum aliquid sunt", "body": "deserunt eos nobis asperiores et hic\nest debitis repellat molestiae optio\nnihil ratione ut eos beatae quibusdam distinctio maiores\nearum voluptates et aut adipisci ea maiores voluptas maxime" }, { "userId": 4, "id": 33, "title": "qui explicabo molestiae dolorem", "body": "rerum ut et numquam laborum odit est sit\nid qui sint in\nquasi tenetur tempore aperiam et quaerat qui in\nrerum officiis sequi cumque quod" }, { "userId": 4, "id": 34, "title": "magnam ut rerum iure", "body": "ea velit perferendis earum ut voluptatem voluptate itaque iusto\ntotam pariatur in\nnemo voluptatem voluptatem autem magni tempora minima in\nest distinctio qui assumenda accusamus dignissimos officia nesciunt nobis" }, { "userId": 4, "id": 35, "title": "id nihil consequatur molestias animi provident", "body": "nisi error delectus possimus ut eligendi vitae\nplaceat eos harum cupiditate facilis reprehenderit voluptatem beatae\nmodi ducimus quo illum voluptas eligendi\net nobis quia fugit" }, { "userId": 4, "id": 36, "title": "fuga nam accusamus voluptas reiciendis itaque", "body": "ad mollitia et omnis minus architecto odit\nvoluptas doloremque maxime aut non ipsa qui alias veniam\nblanditiis culpa aut quia nihil cumque facere et occaecati\nqui aspernatur quia eaque ut aperiam inventore" }, { "userId": 4, "id": 37, "title": "provident vel ut sit ratione est", "body": "debitis et eaque non officia sed nesciunt pariatur vel\nvoluptatem iste vero et ea\nnumquam aut expedita ipsum nulla in\nvoluptates omnis consequatur aut enim officiis in quam qui" }, { "userId": 4, "id": 38, "title": "explicabo et eos deleniti nostrum ab id repellendus", "body": "animi esse sit aut sit nesciunt assumenda eum voluptas\nquia voluptatibus provident quia necessitatibus ea\nrerum repudiandae quia voluptatem delectus fugit aut id quia\nratione optio eos iusto veniam iure" }, { "userId": 4, "id": 39, "title": "eos dolorem iste accusantium est eaque quam", "body": "corporis rerum ducimus vel eum accusantium\nmaxime aspernatur a porro possimus iste omnis\nest in deleniti asperiores fuga aut\nvoluptas sapiente vel dolore minus voluptatem incidunt ex" }, { "userId": 4, "id": 40, "title": "enim quo cumque", "body": "ut voluptatum aliquid illo tenetur nemo sequi quo facilis\nipsum rem optio mollitia quas\nvoluptatem eum voluptas qui\nunde omnis voluptatem iure quasi maxime voluptas nam" } ]

     

    [완성 소스 github 주소] https://github.com/dailyshow/retrofitGet2

     

    이전에 했던 Retrofit Get방식 간단 예제1 의 내용을 토대로 진행하겠습니다. 

    Retrofit get 방식 간단 예제1 게시물을 보시려면 여기를 눌러주세요.

     

    userId를 이용해서 자료를 출력 하려고 합니다. 해당 내용만 출력하기 위해서는

    JsonPlaceHolderApi 에 @GET("posts"), @Query("userId") int userId 를 추가해줍니다.

    "posts"는 주소의 경로입니다.

    "userId" 는 API URL query string 입니다

    가져오려는 URL 경로는 http://jsonplaceholder.typicode.com/posts?userId=4 이렇게 생겼습니다.

     

     

    <JsonPlaceHolderApi.java>

    1
    2
    3
    4
    public interface JsonPlaceHolderApi {
        @GET("posts")
        Call<List<Post>> getPost(@Query("userId"int userId);
    }
    cs

     

     

    <MainActivity.java>

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    public class MainActivity extends AppCompatActivity {
        private final String BASEURL = "http://jsonplaceholder.typicode.com/";
        private TextView textViewResult;
     
        private JsonPlaceHolderApi jsonPlaceHolderApi;
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
     
            textViewResult = findViewById(R.id.text_view_result);
     
            Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl(BASEURL)
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
     
            jsonPlaceHolderApi = retrofit.create(JsonPlaceHolderApi.class);
     
             getPosts();
        }
     
        private void getPosts() {
            Call<List<Post>> call = jsonPlaceHolderApi.getPost(4);
     
            call.enqueue(new Callback<List<Post>>() {
                @Override
                public void onResponse(Call<List<Post>> call, Response<List<Post>> response) {
                    if (!response.isSuccessful()) {
                        textViewResult.setText("code: " + response.code());
                        return;
                    }
     
                    List<Post> posts = response.body();
     
                    for (Post post : posts) {
                        String content = "";
                        content += "ID: " + post.getId() + "\n";
                        content += "User ID: " + post.getUserId() + "\n";
                        content += "Title: " + post.getTitle() + "\n";
                        content += "Text: " + post.getText() + "\n";
     
                        textViewResult.append(content);
                    }
                }
     
                @Override
                public void onFailure(Call<List<Post>> call, Throwable t) {
                    textViewResult.setText(t.getMessage());
                }
            });
        }
    }
    cs

    이렇게 하면 userId 가 4 인 항목만 받아와서 출력하게 됩니다.

     

    <결과 화면>

    잘 받아와 지는것 같습니다.

     

    이번에는 지금 나온것을 조금 가공하여 id 를 기준으로 내림 차순 정렬로 출력해 보도록  하겠습니다.

     

     

    <JsonPlaceHolderApi.java>

    1
    2
        @GET("posts")
        Call<List<Post>> getPost(@Query("userId"int userId, @Query("_sort"String sort, @Query("_order"String desc);
    cs

     

    <MainActivity.java>

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    private void getPosts() {
            Call<List<Post>> call = jsonPlaceHolderApi.getPost(4"id""desc");
     
            call.enqueue(new Callback<List<Post>>() {
                @Override
                public void onResponse(Call<List<Post>> call, Response<List<Post>> response) {
                    if (!response.isSuccessful()) {
                        textViewResult.setText("code: " + response.code());
                        return;
                    }
     
                    List<Post> posts = response.body();
     
                    for (Post post : posts) {
                        String content = "";
                        content += "ID: " + post.getId() + "\n";
                        content += "User ID: " + post.getUserId() + "\n";
                        content += "Title: " + post.getTitle() + "\n";
                        content += "Text: " + post.getText() + "\n";
                        content += "\n";
     
                        textViewResult.append(content);
                    }
                }
     
                @Override
                public void onFailure(Call<List<Post>> call, Throwable t) {
                    textViewResult.setText(t.getMessage());
                }
            });
        }
    cs

    mainActivity 에서 jsonPlaceHolderApi getPost() 에서 추가해준 인자값을 추가해주었습니다.

    jsonPlaceHolderApi.getPost(4"id""desc");

     

    이렇게 입력 하시고 다시 실행 해보시면 아까와는 id 값이 반대로 출력 되는것을 확인하실 수 있습니다.

     

     

     

    그리고 이렇게 userId 하나만 검색 하는것이 아니라 여러개도 같이 요청할 수 있습니다.

    JsonPlaceHolderApi 내용을 수정해 주도록 하겠습니다.

     

    <JsonPlaceHolderApi.java>

    1
    2
        @GET("posts")
        Call<List<Post>> getPost(@Query("userId"int userId, @Query("userId"int userId2, @Query("userId"int userId3);
    cs

    이렇게 여러개를 더 넣어주시면 됩니다.

     

    그리고 mainActivity에서 파라미터 값만 변경해 주시면 되겠죠.

     

    <MainActivity.java>

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
        private void getPosts() {
            Call<List<Post>> call = jsonPlaceHolderApi.getPost(1,3,7);
     
            call.enqueue(new Callback<List<Post>>() {
                @Override
                public void onResponse(Call<List<Post>> call, Response<List<Post>> response) {
                    if (!response.isSuccessful()) {
                        textViewResult.setText("code: " + response.code());
                        return;
                    }
     
                    List<Post> posts = response.body();
     
                    for (Post post : posts) {
                        String content = "";
                        content += "ID: " + post.getId() + "\n";
                        content += "User ID: " + post.getUserId() + "\n";
                        content += "Title: " + post.getTitle() + "\n";
                        content += "Text: " + post.getText() + "\n";
                        content += "\n";
     
                        textViewResult.append(content);
                    }
                }
     
                @Override
                public void onFailure(Call<List<Post>> call, Throwable t) {
                    textViewResult.setText(t.getMessage());
                }
            });
        }
    cs

    jsonPlaceHolderApi.getPost(1,3,7) 를 지정해서 userId 1 번 3번 7번을 지정하였습니다.

     

    <실행 결과>

     

     

     

    위에처럼 userId 를 여러개 지정해줘도

    되지만 배열을 이용한 방법을 사용하셔도 동일한 결과를 나타낼 수 있습니다.

     

    <JsonPlaceHolderApi.java>

    1
    2
        @GET("posts")
        Call<List<Post>> getPost(@Query("userId") Integer[] userId);
    cs

     

    <MainActivity.java>

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
        private void getPosts() {
            Call<List<Post>> call = jsonPlaceHolderApi.getPost(new Integer[]{3,6,9});
     
            call.enqueue(new Callback<List<Post>>() {
                @Override
                public void onResponse(Call<List<Post>> call, Response<List<Post>> response) {
                    if (!response.isSuccessful()) {
                        textViewResult.setText("code: " + response.code());
                        return;
                    }
     
                    List<Post> posts = response.body();
     
                    for (Post post : posts) {
                        String content = "";
                        content += "ID: " + post.getId() + "\n";
                        content += "User ID: " + post.getUserId() + "\n";
                        content += "Title: " + post.getTitle() + "\n";
                        content += "Text: " + post.getText() + "\n";
                        content += "\n";
     
                        textViewResult.append(content);
                    }
                }
     
                @Override
                public void onFailure(Call<List<Post>> call, Throwable t) {
                    textViewResult.setText(t.getMessage());
                }
            });
        }
    cs

    jsonPlaceHolderApi.getPost(new Integer[]{3,6,9});  이렇게 하시면 3번 6번 9번 userId를 가진 내용물만 출력 됩니다.

     

     

    <결과 화면>

     

    이번에는 Map<> 을 이용한 방식을 확인해 보겠습니다.

     

    <JsonPlaceHolderApi.java>

    1
    2
        @GET("posts")
        Call<List<Post>> getPost(@QueryMap Map<StringString> parameter);
    cs

     

    <MainActivity.java>

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
        private void getPosts() {
            Map<StringString> map = new HashMap<>();
            map.put("userId""5");
            map.put("_sort""id");
            map.put("_order""desc");
     
            Call<List<Post>> call = jsonPlaceHolderApi.getPost(map);
     
            call.enqueue(new Callback<List<Post>>() {
                @Override
                public void onResponse(Call<List<Post>> call, Response<List<Post>> response) {
                    if (!response.isSuccessful()) {
                        textViewResult.setText("code: " + response.code());
                        return;
                    }
     
                    List<Post> posts = response.body();
     
                    for (Post post : posts) {
                        String content = "";
                        content += "ID: " + post.getId() + "\n";
                        content += "User ID: " + post.getUserId() + "\n";
                        content += "Title: " + post.getTitle() + "\n";
                        content += "Text: " + post.getText() + "\n";
                        content += "\n";
     
                        textViewResult.append(content);
                    }
                }
     
                @Override
                public void onFailure(Call<List<Post>> call, Throwable t) {
                    textViewResult.setText(t.getMessage());
                }
            });
        }
    cs

    map을 하나 생성해 줍니다. 그리고 put으로 query string으로 들어갈 내용들을 담아줍니다.

     

    Map<StringString> map = new HashMap<>();

    map.put("userId""5");

    map.put("_sort""id");

    map.put("_order""desc");

     

    getPost()에 map 을 넣어줍니다.

    jsonPlaceHolderApi.getPost(map);

     

    이렇게 하시면 Map 을 이용한 방식 완료입니다.

     

    <결과 화면>

     

     

    댓글

Designed by Tistory.