SPRING

스프링 부트로 만든 Restful API 서버와 안드로이드 Retrofit2 통신

merryna 2021. 7. 11. 16:42
반응형

0. Retrofit

 

안드로이에서 서버와 HTTP 통신을 도와주는 유명한 라이브러리 중 하나!

기존의 HttpUrlConnection은 이제 안쓰고 Okhttp에서 나온 라이브러리인 Retrofit을 많이 쓴다고 합니다.

 

Retrofit의 동작 흐름

 

인터페이스 > Retrofit > Service (알아서 Call 객체 반환)

개발자가 해야하는 일은 인터페이스 작성

 

1. build.gradle 세팅

    implementation 'com.squareup.retrofit2:retrofit:2.6.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.6.0'
    implementation 'com.google.code.gson:gson:2.8.6'
    implementation 'com.squareup.okhttp3:logging-interceptor:3.11.0'

GSON은

// 서버와 통신할 데이터 타입에 맞는 컨버터 지정 (Gson 라이브러리 파싱, 데이터를 Model에 담아줌)

 

2. Manifest.xml

 // 통신
 <uses-permission android:name="android.permission.INTERNET" />

// 서버가 HTTP일 때는 적어줘야 함 (Https는 X)
<application android:usesCleartextTraffic="true" />

Http인데 아래 코드를 기입하지 않아서 한참 헤맸음,,

 

 

3. Model.Java

public class Member {
    private String id;
    private String name;
    private int age;
    private String address;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "Member{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", address='" + address + '\'' +
                '}';
    }
}

 

 

4. JsonApi.Java

 

interface 생성

 

public interface JsonApi {
    @GET("member/all")
    Call<List<Member>> getMember();
}

 

 

5. MainActivity.Java

ublic class MainActivity extends AppCompatActivity {

    TextView textView;
    Retrofit retrofit;
    JsonApi jsonApi;
    Call<List<Member>> call;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        retrofit = new Retrofit.Builder()
                .baseUrl("http://10.0.2.2:8080/")    //베이스 url등록
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        jsonApi = retrofit.create(JsonApi.class);

        call = jsonApi.getMember();
        call.enqueue(new Callback<List<Member>>() {
            @Override
            public void onResponse(Call<List<Member>> call, Response<List<Member>> response) {
                if (response.isSuccessful()) {
                	//layout에서 textview id = txt_json
                    textView = (TextView) findViewById(R.id.txt_json);
                    textView.setText(response.body().toString());
                }
            }

            @Override
            public void onFailure(Call<List<Member>> call, Throwable t) {
                Log.e("MainActivity!!!", "실패");
                t.printStackTrace();
            }
        });
    }
}

// enqueue 함수 호출 Callback 클래스의 객체를 매개변수로 지정, 네트워킹 시도
// 서버에서 정상 결과 받으면 자동으로 onResponse()함수 호출
// 결과 데이터가 전달 실패시, onFailure() 함수

 

 

+로컬 호스트에 접속하는 URL 

에뮬레이터 : http://10.0.2.2:8080

디바이스 연결 : 실제 내부 Ipv4로 접속

 

 

반응형