반응형
***
코틀린 버전 및 더 자세한 설명으로 다시 포스팅했습니다. 2022/8/23
내가 이번에 앱을 만들면서 서버와 연동을 하게 되었는데 REST API로 만들었다고 한다.
그래서 어떻게 연결하나 찾아보면서 공부했는데
생각보다 어려웠다.
Manifest
일단 먼저
Manifest에
<uses-permission android:name="android.permission.INTERNET" />
를 추가하고
Manifest에 application에
android:usesCleartextTraffic="true"
를 추가해 준다.
Get
먼저 Get을 알아보자.
내가 사용한 방법은 Retrofit이다.
먼저 모델을 설정해 줘야 한다.
내가 만든 로그인 시스템으로 예를 들겠다.
public class LoginResult {
private boolean success;
private int code;
private String msg;
private String data;
public boolean isSuccess() {
return success;
}
public void setSuccess(boolean success) {
this.success = success;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
}
나는 이런 식으로 만들어 주었다.
모델 클래스를 다 만든 다음,
LoginActivity 클래스에 인터페이스를 선언해준다.
public interface Service{
@GET("/api/v1/suggestion/get/{suggestionId}")
Call<RoginResult> get(@Field("Token") String token);
}
static class RetrofitServiceImplFactory{
private static Retrofit getretrofit(){
return new Retrofit.Builder()
.baseUrl("https://f93e-58-238-74-139.ngrok.io/")
.addConverterFactory(GsonConverterFactory.create()).build();
}
public static LoginResultActivity.Service Post(){
return getretrofit().create(Service.class);
}
}
이런 식으로.
사용할 때에는
RetrofitService retrofitService = RetrofitServiceeBuilder.retrofit.create(RetrofitService.class);
Call<LoginResult> call = retrofitService.getResults("1");
call.enqueue(new Callback<Device>() {
@Override
public void onResponse(Call<LoginResult> call, Response<Result> response) {
if (response.isSuccessful()) {
Result result = response.body();
System.out.println("성공")
} else {
System.out.println("실패")
}
}
@Override
public void onFailure(Call<Device> call, Throwable t) {
System.out.println("통신 실패" + t.getMessage)
}
});
이런 식으로 사용하면 된다.
Post
포스트도 비슷한 방식으로 사용하면 된다.
먼저 모듈을 만들어준다.
public class WriteResult {
private String title;
private String content;
private String writerId;
}
그다음 클래스 내에서 인터페이스를 구현해 준다.
public interface Service{
@FormUrlEncoded
@POST("/api/v1/suggestion/add-suggestion")
Call<WriteResult> setPost(@Field("title") String title
, @Field("content") String content
, @Field("writerId") String writerId);
@GET("/api/v1/user")
Call<UserGet> user(@Field("Token") String Token);
}
static class RetrofitServiceImplFactory{
private static Retrofit getretrofit(){
return new Retrofit.Builder()
.baseUrl("https://f93e-58-238-74-139.ngrok.io/")
.addConverterFactory(GsonConverterFactory.create()).build();
}
public static WriteActivity.Service Post(){
return getretrofit().create(Service.class);
}
사용할 때에는
Call<WriteResult> call = WriteActivity.RetrofitServiceImplFactory.Post().setPost(Title,Content,MainActivity.Id);
call.enqueue(new Callback<WriteResult>() {
@Override
public void onResponse(Call<WriteResult> call, Response<WriteResult> response) {
if(response.isSuccessful()){
Log.d("성공","성공입니당");
LoginResultActivity.iscreated = true;
startActivity(i);
finish();
}else {
Toast.makeText(getApplicationContext(), "알 수 없는 오류", Toast.LENGTH_SHORT).show();
Log.d("실패", "실패");
}
}
@Override
public void onFailure(Call<WriteResult> call, Throwable t) {
//...
}
이런 식으로 사용하면 된다.
나는 Retrofit을 사용하였지만 Retrofit 말고도 많은 통신방식이 있으니 알아보고 싶으면 찾아보길 바란다.
반응형
'안드로이드' 카테고리의 다른 글
[안드로이드/JAVA] 백그라운드 색 바꾸기, 이미지 뷰 색 바꾸기 (0) | 2022.03.04 |
---|---|
[안드로이드] 이미지에 텍스트 넣기 (0) | 2022.03.03 |
[안드로이드] 레이아웃 살펴보기 (0) | 2021.12.31 |
[Kotlin/안드로이드] 화면전환 Intent (0) | 2021.12.04 |
[Kotlin 안드로이드] 뷰바인딩 (0) | 2021.11.25 |