우와테크

android Studio 안드로이드 스튜디오 Get 통신해서 ListView 조회 본문

java-androidStudio

android Studio 안드로이드 스튜디오 Get 통신해서 ListView 조회

uwaTech 2022. 2. 10. 16:41

다들 코틀린쓰나보다. 우와는 자바쓰는데...

Http 통신을 하고 싶은데 정보가 없어서 정리해보JAVA

특히 @Get방식은 더없어서 이걸로 정리하기로 한다.

구현하기가 어려운 만큼 이론도 어렵다.

 

구현하다가 보게 되는 용어만 간단히 집고 가본다.

● CRUD
   데이터를 관리하는 것 - Create(추가)Read(읽기,조회)Update(수정)Delete(삭제)의 방법으로 데이터를 관리.
HTTP 통신
   앱을 통해 데이터베이스에 접근하는데 다리역할을 하는 WEB에서 데이터를 담는 수레역할을 하는 아이.
   request(요청)response(응답)으로 표현한다.
REST API
   HTTP 통신에 필요한 HTTP URI, HTTP Method 등을 가지고 있는 API(Application Programming Interface)
retrofit
   REST API 를 위해 만들어진 라이브러리

>>>>우와는 retrofit 라이브러리를 이용해서 REST API를 쓸꺼다.

>>>>왜냐하면 HTTP통신을 통해 데이터 CRUD를 해야 하기 때문이다.

(역시 이론은 어렵다..여기까지)

 

구현시작

1. 라이브러리 추가

2. 권한 추가

3. API 생성

4. Model Class (XXResponse) 정의

5. Get메소드 정의

6. 필요한 곳에 retrofit 정의

7. adapter 수정

 

소상히 알려준다.

라이브러리 추가

1. 왼쪽 탭에 Project에서 콤보박스를 Android로 맞춘다.

2. app이 아니고 Gradle Scripts 에서 build.gradle (Module:~~~~~) 이다. project 가 아니라는 것이다.

3. dependencies 에 아래 소스를 복붙한다.

implementation 'com.squareup.retrofit2:retrofit:[버전]'
implementation 'com.squareup.retrofit2:converter-gson:[버전]'
implementation 'com.squareup.okhttp3:okhttp:[버전]'
implementation 'com.squareup.okhttp3:logging-interceptor:[버전]'

버전정보는 업데이트 될수 있어서 생략했다.

 

권한 추가

1. 왼쪽 탭에 Project에서 콤보박스를 Android로 맞춘다.

2. app에서 manifests - AndroidManifest.xml이다. 

3. <manifest> </manifest> 사이에 아래 소스를 복붙한다.

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

 

API 생성

1. 왼쪽 탭에 Project에서 콤보박스를 Android로 맞춘다.

2. app에서 java에서 오른쪽 마우스를 누르면 New - Java Class로 새로운 자바 파일을 생성한다.

package user.example.myapplication;

public interface Api {

}

 

Model Class (XXResponse) 정의

1. 왼쪽 탭에 Project에서 콤보박스를 Android로 맞춘다.

2. app에서 java에서 오른쪽 마우스를 누르면 New - Java Class로 새로운 자바 파일을 생성한다.

package user.example.myapplication;

import com.google.gson.annotations.SerializedName;

public class UserResponse {
    @SerializedName("id")
    public String id;
    @SerializedName("name")
    public String name;
    @SerializedName("pw")
    public String pw;
    @SerializedName("gender")
    public String gender;
    @SerializedName("job")
    public String job;

 

Get메소드 정의

1. Api.java에 아래 소스처럼 입력한다.

@GET("getuser")
Call<List<UserResponse>> GetUserList(
        @Query("gender") String gender,
        @Query("job") String job,
);

@GET : get method를 쓰겠다. 다른 method를 쓰고자 한다면 이자리에 post/put/delete를 쓴다.

("----------") : method로 사용할 이름. uri에서 보이는 메소드명이다

기본 형식 : Call<Response명> 메소드명(

                     @Query("변수명a") 자료형 변수명b );

변수명a : uri에 보이는 변수명

변수명b : 소스와 연결되는 변수명, 소스에 정의한 변수의 자료형과 맞춰준다.

 

필요한 곳에 retrofit 정의

MainActivity.java

 private UserAdapter adapter;
 private Api api; 
 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        api = httpAPI.getClient().create(Api.class);//WEB-SERVICE 연결
       
        TextView gender = findViewById(R.id.txtGender);
        TextView job = findViewById(R.id.textJob);
        Button buttonOK = findViewById(R.id.btnOk);
        buttonOK.setOnClickListener(new Button.OnClickListener() {
            @Override
            public void onClick(View v) {
                GetUserList(gender, job);
            }
        });
    }
   
    public void GetUserList(String id, String name) {
        Call<List<UserResponse>> call = api.GetUserList(gender, job);
        call.enqueue(new Callback<List<UserResponse>>() {
            @Override
            public void onResponse(Call<List<UserResponse>> call, Response<List<UserResponse>> response) {
                List<UserResponse> resultList = response.body();
                onSetUserList(resultList);
            }

            @Override
            public void onFailure(Call<List<UserResponse>> call, Throwable t) {
            }
        });//Get
     
     public void onSetUserList(List<UserResponse> resultList) {
        adapter = new UserAdapter();
        final ListView listView = (ListView) findViewById(R.id.listView);
        listView.setAdapter(adapter);
        adapter.addItems(resultList);
    }

 

adapter 수정

1. 더 소상하게 적어놓은 ListView 항목나타내기를 작성한다.

 

안드로이드 스튜디오 ListView 항목 나타내기

만만하게 봤다가 헤매는 ListView. DB 연결하기 전에 구조먼저 짜보자 필요한 xml 파일 2개 : activity_listview_main화면, layout_listview 화면 필요한 java 파일 3개 : ListviewActivity, VO, Adapter 구현하기..

uwatech.tistory.com

2. UserAdapter.java에서 addItems를 추가한다.

public void addItems(List<UserResponse> reportList) {
    for(int i=0; i<UserList.size();i++)
    {
        UserVO vo = new UserVO();
        vo.setId(UserList.get(i).id);
        vo.setName(UserList.get(i).name);
        vo.setGender(UserList.get(i).gender);
        vo.setJob(UserList.get(i).job);

        userVO.add(vo);
    }
}

 

끝..

 

post와 get의 차이점에 대한 설명은 좀더 똑똑해질 우와에게 맡기기로 하자.

 

2022.02.03