반응형
포스트맨을 활용해 데이터에 어떤 항목들이 필요한지 확인한다.

확인해봤을때 result가 필요하다는 판단으로 PostRes 클래스를 만들어 준다.
PostRes.java
package com.graphene911.sns.model;
public class PostRes {
private String result;
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
}
사진과 텍스트를 저장할 PostingApi를 만들어 준다.
package com.graphene911.sns.api;
import com.graphene911.sns.model.PostRes;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.Header;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
public interface PostingApi {
@Multipart
@POST("/posting")
Call<PostRes> addPosting(@Header("Authorization") String token, @Part MultipartBody.Part photo, @Part("content")RequestBody content);
}
처리 할 액티비티로 이동해서
onCreate 함수 안에 필요한 코드를 작성해준다.
btnSave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(photoFile == null){
Toast.makeText(AddActivity.this, "사진은 필수 입니다.", Toast.LENGTH_SHORT).show();
return;
}
String content = editContent.getText().toString().trim();
if(content.isEmpty()){
Toast.makeText(AddActivity.this, "내용을 입력하세요", Toast.LENGTH_SHORT).show();
return;
}
Retrofit retrofit = NetworkClient.getRetrofitClient(AddActivity.this);
PostingApi api = retrofit.create(PostingApi.class);
// 멀티파트로 파일을 보내는 경우, 파일 파라미터 만드는 방법
RequestBody fileBody = RequestBody.create(photoFile, MediaType.parse("image/*"));
MultipartBody.Part photo = MultipartBody.Part.createFormData("photo", photoFile.getName(), fileBody);
// 멀티파트로 텍스트를 보내는 경우 파라미터 만드는 방법
RequestBody contentBody = RequestBody.create(content, MediaType.parse("text/plain"));
// Header 에 들어갈 accessToken 을 가져온다.
SharedPreferences sp = getApplication().getSharedPreferences(Config.PREFERENCES_NAME, MODE_PRIVATE);
String accessToken = sp.getString("accessToken", "");
Call<PostRes> call = api.addPosting("Bearer " + accessToken, photo, contentBody);
showProgress("포스팅 업로드 중...");
call.enqueue(new Callback<PostRes>() {
@Override
public void onResponse(Call<PostRes> call, Response<PostRes> response) {
dismissProgress();
Toast.makeText(AddActivity.this, "업로드가 완료 되었습니다.", Toast.LENGTH_SHORT).show();
finish();
}
@Override
public void onFailure(Call<PostRes> call, Throwable t) {
dismissProgress();
}
});
}
});
반응형
'TOOL > Android Studio' 카테고리의 다른 글
| Android Studio - Deprecated되는 함수인 setOnNavigationItemSelectedListener() 대체 함수 (0) | 2022.07.28 |
|---|---|
| Android Studio - Fragment (0) | 2022.07.27 |
| Android Studio - 네트워크 통신을 위한 Volley 라이브러리 (0) | 2022.07.23 |
| Android Studio - 카메라, 앨범 처리 (0) | 2022.07.21 |
| Android Studio - ActionBar에 뒤로가기 버튼 추가하기 (0) | 2022.07.19 |