본문 바로가기
Android Studio

[Android Studio] Retrofit 라이브러리를 이용해 RecyclerView 화면 처리하기

by coding_su 2023. 2. 9.

📝레트로핏 라이브러리를 이용해 RecyclerView 화면 처리하기

먼저 API처리 클래스에 GET으로 메모 리스트를 가져오는 API를 만들어준다

public interface MemoApi {

    // 내 메모 가져오는 API
    @GET("/memo")
    Call<MemoList> getMemoList(@Header("Authorization") String token, @Query("offset") int offset,
                               @Query("limit") int limit);

}

 

레트로핏 라이브러리를 통해서 응답받는 클래스도 만들어주는데

데이터가 아래 이미지처럼 리스트로 오기때문에 리스트클래스와 그 리스트의 데이터를 받을 클래스로 두개 만들어준다

(private이기 때문에 Getter / Setter도 만들어준다)

public class MemoList implements Serializable {
    private String result;
    private List<Memo> items;
    private int count;
}
public class Memo implements Serializable {
    private int id;
    private String title;
    private String datetime;
    private String content;
    private String createdAt;
    private String updatedAt;
}

 

어댑터를 만들고(참고 https://coding-jisu.tistory.com/260)

데이터를 받아와 리사이클러뷰에 표시하는 함수로 만들어 필요한 곳에 사용해준다

※ 멤버변수 입력하기 ArrayList<Memo> memoArrayList = new ArrayList<>();

private void getNetworkData() {
    progressBar.setVisibility(View.VISIBLE);
    Retrofit retrofit = NetworkClient.getRetrofitClient(MainActivity.this);
    MemoApi api = retrofit.create(MemoApi.class);
    Call<MemoList> call = api.getMemoList("Bearer " + accessToken, 0, 20);
    call.enqueue(new Callback<MemoList>() {
        @Override
        public void onResponse(Call<MemoList> call, Response<MemoList> response) {
            progressBar.setVisibility(View.GONE);

            if (response.isSuccessful()) {
                // 정상적으로 데이터 받았으니 리사이클러뷰에 표시한다
                MemoList memoList = response.body();
                memoArrayList.addAll(memoList.getItems());

                adapter = new MemoAdapter(MainActivity.this, memoArrayList);
                recyclerView.setAdapter(adapter);

            } else {
                Toast.makeText(MainActivity.this,"서버에 문제가 있습니다", Toast.LENGTH_SHORT).show();
                return;
            }
        }

        @Override
        public void onFailure(Call<MemoList> call, Throwable t) {
            progressBar.setVisibility(View.GONE);
        }
    });

}

댓글