네트워크로 form-data 보내는 방법 _ retrofit2
포스트맨의 생성 API를 보고, 앱 API 만들기
- form-data의 File과 Text 받는 API 코드 작성
- @Multipart
- 사진 = @Part MultipartBody.Part
- 텍스트 = @Part(" ")RequestBody
public interface PostingApi {
@Multipart
@POST("/post")
Call<Res> addPosting(@Header("Authorization") String token,
@Part MultipartBody.Part photo,
@Part("comment")RequestBody content);
}
네트워크 호출하는 코드 작성
btnSave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 1. 파일이 있어야 하고,
// 2. 내용이 있어야 한다.
String content = editContent.getText().toString().trim();
if(photoFile == null||content.isEmpty()){
Snackbar.make(btnSave, "사진과 내용 모두 입력해주세요.", Snackbar.LENGTH_SHORT).show();
return;
}
// 레트로핏 라이브러리 이용해서 네트워크로 호출한다.
// 프로그레스바 키기
showProgress();
Retrofit retrofit = NetworkClient.getRetrofitClient(AddActivity.this);
// API 만들고 와서 마저 작성
PostingApi api = retrofit.create(PostingApi.class);
// 저장되어 있는 토큰 가져오기
SharedPreferences sp = getSharedPreferences(Config.SP_NAME, MODE_PRIVATE);
String token = sp.getString("token","");
// 보낼 파일 만들기
RequestBody fileBody = RequestBody.create(photoFile, MediaType.parse("image/jpeg"));
// createFormData(포스트맨 파일 키값, 만든 변수 photoFile의 이름, fileBody)
// 파일이 너무 커서 나눠서 보내기 위해, Part를 사용한다.
MultipartBody.Part photo = MultipartBody.Part.createFormData("photo", photoFile.getName(), fileBody);
// 보낼 텍스트 만들기
// create(입력받은 텍스트 변수, 텍스트 타입)
RequestBody textBody = RequestBody.create(content, MediaType.parse("text/plain"));
Call<Res> call = api.addPosting("Bearer "+token, photo, textBody);
call.enqueue(new Callback<Res>() {
@Override
public void onResponse(Call<Res> call, Response<Res> response) {
// 프로그레스바 끄기
dismissProgress();
if(response.isSuccessful()){
Toast.makeText(AddActivity.this, "포스트 성공", Toast.LENGTH_SHORT).show();
finish();
}else{
}
}
@Override
public void onFailure(Call<Res> call, Throwable throwable) {
// 프로그레스바 끄기
dismissProgress();
Toast.makeText(AddActivity.this, "포스트 생성 실패", Toast.LENGTH_SHORT).show();
return;
}
});
}
});
*위에 코드에서 사용하는 showProgress() dialog 코드
Dialog dialog;
void showProgress(){
dialog = new Dialog(this);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
dialog.setContentView(new ProgressBar(this));
dialog.setCancelable(false);
dialog.setCanceledOnTouchOutside(false);
dialog.show();
}
void dismissProgress(){
dialog.cancel();
}
'Android Studio' 카테고리의 다른 글
[Android Studio] 위치 기반 서비스 _ 로그로 위치 확인 ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION (0) | 2024.06.18 |
---|---|
[Android Studio] 탭바 만들기 _ 라이브러리 설치 및 사용 방법 (0) | 2024.06.18 |
[Android Studio] 화면 업데이트 하는 방법 _ ArrayList, like (0) | 2024.06.17 |
[Android Studio] 네트워크 라이브러리 _ Retrofit2 사용하기 (0) | 2024.06.14 |
[Android Studio] 카메라, 앨범 앱 작동 시키기 _ 권한 설정, showDialog() (2) | 2024.06.14 |