안드로이드에서 데이터 입출력
- 요청 → 데이터로 컨트롤러가 응답을 처리(resp가 처리)
- REST API : 안드로이드와 데이터베이스 중간을 연결해주는 미들웨어를 말한다.
안드로이드 미들웨어 연동하기
- manifests.xml에 내용을 추가한다.
- <**uses-permission android:name="android.permission.INTERNET"**/>
- 앱이 인터넷을 사용한다는 것을 명시한다.
- 안드로이드는 3단계 위험도 구분이 있고, 인터넷은 낮은 권한으로 가능하다.
- 카메라는 사용자 허가가 필요하다.
- android:usesCleartextTraffic="true"
- application 태그 내부에 작성한다.
- http 프로토콜을 사용하도록 한다.
- 안드로이드는 보안상 이유로 기본값으로 http 요청을 막아두었다. https만 사용 가능
- https는 SSL, TLS 등 암호화된 정보를 주고받는다.
- 기본값으로 암호화 된 정보를 사용하지 않고 암호화 되지 않은 정보를 사용한다.
- <**uses-permission android:name="android.permission.INTERNET"**/>
- 라이브러리 추가
- Retrofit : HttpClient 처리를 쉽게 가능하게 하는 라이브러리(Volley, OkHttp 등)
- Retrofit에 사용할 스칼라 컨버터 : 데이터를 단일 String으로 양쪽이 표준을 맞춘다.
- Gson : 어떤 객체, 데이터를 전부 Json으로 쉽게 바꾸게 해준다. Json을 객체로 바꾸는 역할도 해준다.
// <https://mvnrepository.com/artifact/com.squareup.retrofit2/retrofit> 레트로핏 코어 implementation group: 'com.squareup.retrofit2', name: 'retrofit', version: '2.9.0' // <https://mvnrepository.com/artifact/com.squareup.retrofit2/converter-scalars> 레트로핏 스칼라 컨버터 단일행 데이터를 받기 위한 컨버터 중 가장 간단함 implementation group: 'com.squareup.retrofit2', name: 'converter-scalars', version: '2.9.0' // <https://mvnrepository.com/artifact/com.google.code.gson/gson> Json 변환하기 위한 라이브러리 implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.9'
retrofit 사용
- 데이터 입출력을 위한 메소드를 인터페이스에 만들어서 사용한다.
- 콜백을 위한 메소드를 만들고 요청할 url(매핑), 파라메터 타임을 지정한다.
public interface ApiInterface{
//@GET("users/{user}/repos")
//Call<List<Repo>> listRepos(@Path("user") String user);
@FormUrlEncoded //@Url을 같이 사용해야만 가능하다. 어노테이션이 없는 경우 동작이 불가능하다.
@POST
Call<String> getData(@Url String url, @FieldMap HashMap<String, Object> params);
//get 방식의 메소드
@GET("{mapping}")
Call<String> clientGetMethod(@Path("mapping") String url, @QueryMap HashMap<String, Object> params);
}
- 레트로핏 객체를 생성해 줄 메소드를 static으로 생성한다.
- baseurl은 웹 프로젝트의 기본 주소를 나타낸다.
- 레트로핏 컨버터 스칼라를 사용하기 때문에 컨버터 팩토리를 추가한다.
- String Json을 사용 가능하게 한다.
public static Retrofit getApiClient(){
Retrofit retrofit = new Retrofit.Builder()//레트로핏 빌더로 레트로핏 객체 생성
.baseUrl("<https://192.168.0.57/mid/>")//요청을 전송할 url을 지정. 내 톰캣 프로젝트
.addConverterFactory(ScalarsConverterFactory.create())//String Json 사용이 가능해진다.
.build();
return retrofit;
}
- 사용할 클래스에서 ApiInterface를 service라는 이름으로 선언하고 ApiClient의 스태틱 메소드인 getApiClient.create를 사용하여 초기화 한다.
- getData()의 내부에 서블릿 매핑에 해당하는 url과 같이 보낼 파라메터를 넣어준다.
- 데이터를 요청할 때 service.getData().enqueue()를 사용하여 비동기로 요청을 처리할 수 있다.
- excute는 동기화 처리기 때문에 앱이 정지될 수 있다. 사용 x
- enqueue의 파라메터로 콜백 메소드를 생성하고 오버라이딩 처리를 한다.
- onResponse : 응답이 있는 경우의 처리를 한다.
- onFailure : 응답이 없는 경우의 처리를 한다.
ApiInterface service = ApiClient.getApiClient().create(ApiInterface.class);
service.getData("aaa.and", params).enqueue(new Callback<String>() {
@Override
public void onResponse(Call<String> call, Response<String> response) {
//응답이 있는 경우
}
@Override
public void onFailure(Call<String> call, Throwable t) {
//응답이 없는 경우
}
});
- 안드로이드에서 JsonString을 생성하기 위한 코드이다.
String jsonData = new Gson().toJson(vo);
- 서블릿에서 요청시 받은 json String을 해석할 때 사용하는 코드이다.
MiddleVO vo = new Gson().fromJson(req.getParameter("andParam"), MiddleVO.class);
옵저버 패턴의 순서
- 응답을 위한 메소드를 가진 인터페이스를 하나 만든다.
- public interface CdCallBack { public void onResult(boolean isResult, String data);//MainActivity에서 new로 생성 후 CommonConn의 결과가 onResult를 실행하도록 한다. }
- onExcute 메소드의 파라메터로 인터페이스를 넣어준다.
- public void onExcute(CdCallBack callBack)
- 메소드의 성공, 실패에서 콜백 메소드가 실행되도록 한다.
- callBack.onResult(true, response.body());
- 호출한 위치에서 콜백 인터페이스를 이용한 메소드를 작성한다.
- new CommonConn(this,"cd.cd").onExcute(new CommonConn.CdCallBack() { @Override public void onResult(boolean isResult, String data) { Log.d("Common", "onResult: "+data); Log.d("Common", "onResult: "+isResult); } });
Glide
- url을 이용하여 이미지를 붙이는 툴
- 그래들을 통해 디펜던시를 추가해준다.
- 주의점 : wrap_content 사용 시 오류가 발생할 수 있기 때문에 사용하지 않도록 한다.
Glide.with(this)
.load("<https://i1.ruliweb.com/ori/17/04/23/15b9a751497159acd.gif>")
.error(R.drawable.ic_launcher_foreground)//에러 발생
.fallback(R.drawable.ic_launcher_background)//null 반환시
.into(binding.imgvLogo);
'공부일지' 카테고리의 다른 글
231220 (Spring) (0) | 2023.12.20 |
---|---|
231219 (Android) (0) | 2023.12.20 |
231211 (Android) (0) | 2023.12.11 |
231206 (Android) (0) | 2023.12.06 |
231205 (JavaScript) (1) | 2023.12.05 |