ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [안드로이드] Retrofit POST 방식 간단 예제
    안드로이드(java)/기능 관련 2019. 11. 19. 17:42

    이번엔 retrofit 으로 POST 하는 방법에 대해 알아보겠습니다.

     

    무엇인가 만들라고 요청할 때 메소드로 POST를 사용하죠. 사용 방법은 아래 내용대로 따라하시면 됩니다.

     

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

     

    get방식 처럼 post 방식도 3 가지 방법으로 필드값을 보낼 수 있습니다.

     

    <JsonPlaceHolderApi.java>

    1
    2
        @POST("posts")
        Call<Post> createPost(@Body Post post);
    cs

     

    <Post.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
    public class Post {
        /**
         * {
         *     "userId": 1,
         *     "id": 1,
         *     "title": "sunt aut facere repellat ~~~",
         *     "body": "quia et suscipit\nsuscipit ~~~"
         * },
         */
     
        private int userId;
        private Integer id;
        private String title;
        @SerializedName("body")
        private String text;
     
        public Post(int userId, String title, String text) {
            this.userId = userId;
            this.title = title;
            this.text = text;
        }
     
        public int getUserId() {
            return userId;
        }
     
        public int getId() {
            return id;
        }
     
        public String getTitle() {
            return title;
        }
     
        public String getText() {
            return text;
        }
    }
     
    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
    55
    56
    57
    58
    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);
     
            createPost();
        }
     
        private void createPost() {
            Post post = new Post(23"new title""new text");
     
            Call<Post> call = jsonPlaceHolderApi.createPost(post);
     
            call.enqueue(new Callback<Post>() {
                @Override
                public void onResponse(Call<Post> call, Response<Post> response) {
                    if (!response.isSuccessful()) {
                        textViewResult.setText("code: " + response.code());
                        return;
                    }
     
                    Post postResponse = response.body();
     
                    String content = "";
                    content += "Code : " + response.code() + "\n";
                    content += "Id: " + postResponse.getId() + "\n";
                    content += "User Id: " + postResponse.getUserId() + "\n";
                    content += "Title: " + postResponse.getTitle() + "\n";
                    content += "Text: " + postResponse.getText() + "\n";
     
                    textViewResult.setText(content);
                }
     
                @Override
                public void onFailure(Call<Post> call, Throwable t) {
                    textViewResult.setText(t.getMessage());
                }
            });
        }
     
     
    }
     
    cs

     

    <결과 화면>

    위 그림 처럼 새로운 내용을 하나 넣은 것을 보실 수 있습니다.

    code 번호 201은 create를 뜻합니다.

    코드가 나타내는 내용을 잘 모르시는 분은 여기를 눌러서 어떤것들이 있는지 확인 하실 수 있습니다. 

     

     

     

    이번에는 @FormUrlEncoded 에서 @Field를 이용한 방법입니다.

     

    <JsonPlaceHolderApi.java>

    1
    2
    3
    4
    5
    6
    7
        @FormUrlEncoded
        @POST("Posts")
        Call<Post> createPost(
                @Field("userId"int userId,
                @Field("title"String title,
                @Field("body"String text
        );
    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 createPost() {
            Call<Post> call = jsonPlaceHolderApi.createPost(30
                    , "formUrlEncoded 적용한 제목 필드 부분"
                    , "formUrlEncoded 적용한 내용 필드 부분");
     
            call.enqueue(new Callback<Post>() {
                @Override
                public void onResponse(Call<Post> call, Response<Post> response) {
                    if (!response.isSuccessful()) {
                        textViewResult.setText("code: " + response.code());
                        return;
                    }
     
                    Post postResponse = response.body();
     
                    String content = "";
                    content += "Code : " + response.code() + "\n";
                    content += "Id: " + postResponse.getId() + "\n";
                    content += "User Id: " + postResponse.getUserId() + "\n";
                    content += "Title: " + postResponse.getTitle() + "\n";
                    content += "Text: " + postResponse.getText() + "\n";
     
                    textViewResult.setText(content);
                }
     
                @Override
                public void onFailure(Call<Post> call, Throwable t) {
                    textViewResult.setText(t.getMessage());
                }
            });
        }
    cs

     

    <결과 화면>

    결과 화면은 똑같이 나옵니다. 내용물만 좀 변경 해봤습니다.

     

     

     

    이번에는 @FormUrlEncoded 에서 @FieldMap 방법입니다.

     

    <JsonPlaceHolderApi.java>

    1
    2
    3
        @FormUrlEncoded
        @POST("Posts")
        Call<Post> createPost(@FieldMap Map<StringString> fields);
    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
        private void createPost() {
            Map<StringString> map = new HashMap<>();
            map.put("userId""25");
            map.put("title""FieldMap 적용한 제목 필드 부분");
            map.put("body""FieldMap 적용한 제목 필드 부분");
     
            Call<Post> call = jsonPlaceHolderApi.createPost(map);
     
            call.enqueue(new Callback<Post>() {
                @Override
                public void onResponse(Call<Post> call, Response<Post> response) {
                    if (!response.isSuccessful()) {
                        textViewResult.setText("code: " + response.code());
                        return;
                    }
     
                    Post postResponse = response.body();
     
                    String content = "";
                    content += "Code : " + response.code() + "\n";
                    content += "Id: " + postResponse.getId() + "\n";
                    content += "User Id: " + postResponse.getUserId() + "\n";
                    content += "Title: " + postResponse.getTitle() + "\n";
                    content += "Text: " + postResponse.getText() + "\n";
     
                    textViewResult.setText(content);
                }
     
                @Override
                public void onFailure(Call<Post> call, Throwable t) {
                    textViewResult.setText(t.getMessage());
                }
            });
        }
    cs

    <결과 화면>

    이렇게 해서 post 방식 3가지를 알아 보았습니다.

     

    다음에는 put 과 delete에 대해서 정리해보도록 하겠습니다.

     

     

    댓글

Designed by Tistory.