ㅇㅋ. Rest API를 왜 쓰는지는 알겠다 이거야.
그렇다면 난 지난 프로젝트에서 어떻게 썼을까?
많은 기능 중 하나을 예를 들어서 설명을 해 보도록 하겠다.
Glue라는 서비스는 친구들끼리 사진을 공유하는 SNS형 사진첩이다.
이때 SNS 기능이 있어서 그룹을 만들 수 있는데
그 그룹을 만드는 기능을 기준으로 설명해 보겠다.
아래는 MVP 모델을 적용한 소스 중 AddGroupPresenter이다.
각 소스별로 중요한 부분은 노란색으로 표시하였다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | import android.graphics.Bitmap; public interface AddGroupPresenter { void setView(AddGroupPresenter.View view); Bitmap imgAddGroupReSizing(String path); void addGroupSave(Bitmap bitmap, String groupName); // setView로 부르기 위해 임시로 만든 View public interface View { void progressAddGroupShow(boolean status); void addGroupResult(int code); void addGroupFinish(); } } | cs |
먼저 만들고자 하는 기능을 선언하였다.
addGroupSave 함수에서 이미지와 그룹 이름을 받아서 그룹을 추가할 것이다.
그리고 아래는 이를 구체화한 AddGroupPresenterImpl이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | import android.app.ProgressDialog; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.util.DisplayMetrics; import android.util.Log; import android.widget.Toast; import com.hm.project_glue.main.home.data.HomeData; import com.hm.project_glue.util.Networking; import com.hm.project_glue.util.http.ListRestAdapter; import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.util.HashMap; import java.util.Map; import okhttp3.MediaType; import okhttp3.RequestBody; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; | cs |
아는 사람은 단번에 이해하겠지만
가장 중요한 부분은 18~22번 라인이다.
API는 문서일 뿐이고 이를 사용하기 위해서는 라이브러리로 끌어와야 하는데
안드로이드를 공부하면서 가장 많이 쓰는 라이브러리가 바로 okhttp와 retrofit이다.
retrofit : REST API통신을 위한 Android/JAVA 라이브러리
정승욱님 블로그 : OkHttp 의 상위 수준 라이브러리로써 Annotation 기반으로 RESTFul Http 요청이 가능하도록 해줍니다.
관련 자료 : http://okky.kr/article/352608
그럼 이 라이브러리로 어떻게 구현했을까?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | public class AddGroupPresenterImpl implements AddGroupPresenter { private static final String TAG = "AddGroupPresenterImpl"; private Context context; AddGroupPresenter.View view; ProgressDialog progress; public AddGroupPresenterImpl(Context context) { this.context = context; } @Override public void setView(View view) { this.view = view; } /** imgAddGroupReSizing 구현 **/ /** addGroupSave 구현 **/ } | cs |
크게 봤을 때, 가장 중요한 부분은 addGroupSave 부분이다.
금방 이해하겠지만 그룹을 추가하기 위한 메서드이다.
위 addGroupSave를 더 자세히 다뤄보자.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | @Override public void addGroupSave(Bitmap bitmap, String groupName) { progress = new ProgressDialog(context); progress.setMessage("Upload...."); progress.setProgressStyle((ProgressDialog.STYLE_SPINNER)); progress.setCancelable(false); progress.show(); String authorization = "Token "+ Networking.getToken(); String fileName="photo_"+groupName+".jpg"; Map<String, RequestBody> imgMap = new HashMap<>(); // 그룹 이미지 세팅 if(bitmap!=null){ /** 생략 **/ } imgMap.put("group_name",RequestBody.create( MediaType.parse("multipart/form-data"), groupName)); /** Call<HomeData> 구현 **/ } | cs |
로딩을 위한 progress를 구현하고 API 인증을 위한 토큰을 받을 변수를 선언한다.
API 인증 방식으로 토큰 방식을 썼고 로그인 후 받게되는 유효한 토큰으로 호출을 한다.
자세한 설명은 조대협씨 슬라이드 쉐어를 참고하면 좋다. (조대협씨 블로그에도 같은 내용이 있다.)
그 아래는 이미지 세팅인데 오늘은 REST api 위주로 학습하기로 했으니 생략한다.
이제 정말 중요한 Call 부분을 학습해보도록 하자.
'Android, iOS' 카테고리의 다른 글
[Project Glue] Rest API와 로그인 체크 (0) | 2017.01.24 |
---|---|
[Project Glue] 어떻게 Rest API를 썼을까? (하) (0) | 2017.01.18 |
저장소 옵션이란게 있다고 합니다 (0) | 2017.01.18 |
[Project Glue] Rest API가 신경쓰여요 (0) | 2017.01.18 |
간략하게 몇가지를 이해해보자 (0) | 2017.01.16 |
Comment