Back-End/그 외

[Android] Retrofit POST 방식 간단 예제

HMHA 2023. 2. 9. 13:30
300x250
반응형

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

 

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

 

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

 

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

 

JsonPlaceHolderApi.java

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

Post.java

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;
    }
}

생성자에 초기화 시킬 내용을 넣어주었습니다.

 

MainActivity.java

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

 

<결과 화면>

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

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

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

 

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

 

JsonPlaceHolderApi.java

    @FormUrlEncoded
    @POST("Posts")
    Call<Post> createPost(
            @Field("userId") int userId,
            @Field("title") String title,
            @Field("body") String text
    );

MainActivity.java

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

<결과 화면>

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

 

 

 

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

 

JsonPlaceHolderApi.java

    @FormUrlEncoded
    @POST("Posts")
    Call<Post> createPost(@FieldMap Map<String, String> fields);

MainActivity.java

    private void createPost() {
        Map<String, String> 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());
            }
        });
    }

<결과 화면>

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

 

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

 


Android + Retrofit에 대한 예제나 그 밖에 Android 관련 정보, Flutter 등의 정보가 있는 블로그 입니다.

관심있으시면 들어가서 보셔도 좋을 것 같습니다

출처 : https://cishome.tistory.com/137

 

[안드로이드] Retrofit POST 방식 간단 예제

이번엔 retrofit 으로 POST 하는 방법에 대해 알아보겠습니다. 무엇인가 만들라고 요청할 때 메소드로 POST를 사용하죠. 사용 방법은 아래 내용대로 따라하시면 됩니다. [완성 소스 github 주소] https://g

cishome.tistory.com

 

300x250
반응형