이번엔 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
'Back-End > 그 외' 카테고리의 다른 글
[Android] 사설 SSL 인증서를 이용한 https 통신 (0) | 2023.02.09 |
---|---|
[Android] Retrofit2 GET, POST 로 API 호출해서 JSON 데이터 받아오기 (0) | 2023.02.09 |
[Android] Android에서 SpringBoot JPA 서버와 연동하기 (0) | 2023.02.09 |
[Android] Android 와 Spring 연동 (0) | 2023.02.09 |
[KAKAO + FLASK] 카카오 챗봇 만들기 블로그 링크 (0) | 2023.02.09 |