-
[안드로이드] Retrofit POST 방식 간단 예제안드로이드(java)/기능 관련 2019. 11. 19. 17:42
이번엔 retrofit 으로 POST 하는 방법에 대해 알아보겠습니다.
무엇인가 만들라고 요청할 때 메소드로 POST를 사용하죠. 사용 방법은 아래 내용대로 따라하시면 됩니다.
[완성 소스 github 주소] https://github.com/dailyshow/retrofitPOST
get방식 처럼 post 방식도 3 가지 방법으로 필드값을 보낼 수 있습니다.
<JsonPlaceHolderApi.java>
12@POST("posts")Call<Post> createPost(@Body Post post);cs <Post.java>
123456789101112131415161718192021222324252627282930313233343536373839public 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>
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758public class MainActivity extends AppCompatActivity {private final String BASEURL = "http://jsonplaceholder.typicode.com/";private TextView textViewResult;private JsonPlaceHolderApi jsonPlaceHolderApi;@Overrideprotected 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>() {@Overridepublic 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);}@Overridepublic void onFailure(Call<Post> call, Throwable t) {textViewResult.setText(t.getMessage());}});}}cs <결과 화면>
위 그림 처럼 새로운 내용을 하나 넣은 것을 보실 수 있습니다.
code 번호 201은 create를 뜻합니다.
코드가 나타내는 내용을 잘 모르시는 분은 여기를 눌러서 어떤것들이 있는지 확인 하실 수 있습니다.
이번에는 @FormUrlEncoded 에서 @Field를 이용한 방법입니다.
<JsonPlaceHolderApi.java>
1234567@FormUrlEncoded@POST("Posts")Call<Post> createPost(@Field("userId") int userId,@Field("title") String title,@Field("body") String text);cs <MainActivity.java>
12345678910111213141516171819202122232425262728293031private void createPost() {Call<Post> call = jsonPlaceHolderApi.createPost(30, "formUrlEncoded 적용한 제목 필드 부분", "formUrlEncoded 적용한 내용 필드 부분");call.enqueue(new Callback<Post>() {@Overridepublic 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);}@Overridepublic void onFailure(Call<Post> call, Throwable t) {textViewResult.setText(t.getMessage());}});}cs <결과 화면>
결과 화면은 똑같이 나옵니다. 내용물만 좀 변경 해봤습니다.
이번에는 @FormUrlEncoded 에서 @FieldMap 방법입니다.
<JsonPlaceHolderApi.java>
123@FormUrlEncoded@POST("Posts")Call<Post> createPost(@FieldMap Map<String, String> fields);cs <MainActivity.java>
12345678910111213141516171819202122232425262728293031323334private 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>() {@Overridepublic 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);}@Overridepublic void onFailure(Call<Post> call, Throwable t) {textViewResult.setText(t.getMessage());}});}cs <결과 화면>
이렇게 해서 post 방식 3가지를 알아 보았습니다.
다음에는 put 과 delete에 대해서 정리해보도록 하겠습니다.
'안드로이드(java) > 기능 관련' 카테고리의 다른 글
[안드로이드] Retrofit PUT, DELETE 방식 간단 예제 (2) 2019.11.28 [안드로이드] Retrofit GET 방식 간단 예제 2 (0) 2019.11.14 [안드로이드] Retrofit GET 방식 간단 예제1 (0) 2019.11.14 [안드로이드] FCM 메시지 전송 될 때 진동 되지 않는 증상. (0) 2019.04.03 [안드로이드] ListView 사용하기 (0) 2019.01.30