Android

얎플 만듀Ʞ : 페읎징(슀크례) 처늬륌 가능하게 하는 윔드 작성하Ʞ

567Rabbit 2024. 6. 12. 17:14

https://codebunny99.tistory.com/164

 

유튜람 API 킀워드 검색하멎 킀워드에 맞는 게시묌을 가젞였는 app개발

https://codebunny99.tistory.com/163 ìœ íŠœëžŒ 데읎터 API륌 Postman(포슀튞맚)윌로 사용하는 방법https://console.cloud.google.com/welcome/new?hl=ko&project=eastern-surface-426200-r0&supportedpurview=project Google 큎띌우드 플랫폌로

codebunny99.tistory.com

 

읎 얎플늬쌀읎션을 베읎슀로 하여 윔드륌 작성하였닀.

 

 

 

 

MainActivity 안에 작성한닀

 

1. recyclerView 쌍 밑 위치에 //슀크례 처늬 ~ 윔드 륌작성한닀

 

 

 

java
ë‹«êž°
// 슀크례 처늬륌 위한 윔드 recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { ​​​​@Override ​​​​public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) { ​​​​​​​​super.onScrollStateChanged(recyclerView, newState); ​​​​} ​​​​@Override ​​​​public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { ​​​​​​​​super.onScrolled(recyclerView, dx, dy); ​​​​​​​​int lastPosition = ((LinearLayoutManager) recyclerView.getLayoutManager()).findLastCompletelyVisibleItemPosition(); ​​​​​​​​int totalCount = recyclerView.getAdapter().getItemCount(); ​​​​​​​​if(lastPosition + 1 == totalCount){ ​​​​​​​​​​​​// ë§š 마지막 데읎터가 화멎에 볎읎게 되멎 ​​​​​​​​​​​​// 넀튞워크 통핎서 데읎터륌 추가로 가젞였도록 한닀. ​​​​​​​​​​​​addNetworkData(); ​​​​​​​​} ​​​​} });

 

 

 

 

 

2. 포슀튞맚에서 nextPageToken을 사용하는 것을 확읞한닀.

 

 

 

 

 

3. MainActivity에서 nextPageToken 파싱 부분을 추가핎쀀닀.

 

 

멀버변수에 추가하Ʞ

 

 

 

nextPageToken을 Ʞ졎의 파싱에 추가핎 파싱핎쀀닀.

 

 

 

 

4. MainActivity에 addNetworkData() 핚수 만듀얎죌Ʞ(Create)

 

 

 

누륎멎, 아래와 같은 위치에 핚수가 만듀얎지는데, 아래와 같읎 nextPageToken 부분을 추가로 작성핎쀀닀

 

java
ë‹«êž°
// 추가로 20개씩을 더 혞출할 때 사용하는 핚수 ​​​​private void addNetworkData() { ​​​​​​​​progressBar.setVisibility(View.VISIBLE); ​​​​​​​​// 유튜람 API륌 혞출핎서 데읎터륌 받아옚닀 ​​​​​​​​RequestQueue queue = Volley.newRequestQueue(MainActivity.this); ​​​​​​​​String url = "https://www.googleapis.com/youtube/v3/search?key=" ​​​​​​​​​​​​​​​​+ Config.YoutubeKey ​​​​​​​​​​​​​​​​+ "&part=snippet&maxResults=20&type=video&order=date&q=" ​​​​​​​​​​​​​​​​+ keyword ​​​​​​​​​​​​​​​​+ "&pageToken=" + nextPageToken;

 

 

 

 

아래부터는 Ʞ졎에 생성한 onCreate 핚수에서 복사하여 귞대로 붙여넣Ʞ 한 후에 url을 위에 생성하였Ʞ 때묞에

 

url읎띌고 바꿔쀀 뒀에,

java
ë‹«êž°
​​​​​​​​JsonObjectRequest request = new JsonObjectRequest( ​​​​​​​​​​​​​​​​Request.Method.GET, ​​​​​​​​​​​​​​​​url, ​​​​​​​​​​​​​​​​null, ​​​​​​​​​​​​​​​​new Response.Listener<JSONObject>() { ​​​​​​​​​​​​​​​​​​​​@Override ​​​​​​​​​​​​​​​​​​​​public void onResponse(JSONObject response) { ​​​​​​​​​​​​​​​​​​​​​​​​// 프로귞레슀 바륌 유저의 눈에서 사띌지게 하는 윔드 ​​​​​​​​​​​​​​​​​​​​​​​​progressBar.setVisibility(View.GONE); ​​​​​​​​​​​​​​​​​​​​​​​​try { ​​​​​​​​​​​​​​​​​​​​​​​​​​​​nextPageToken = response.getString("nextPageToken"); ​​​​​​​​​​​​​​​​​​​​​​​​​​​​JSONArray items = response.getJSONArray("items"); ​​​​​​​​​​​​​​​​​​​​​​​​​​​​for (int i = 0; i < items.length(); i++) { ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​JSONObject data = items.getJSONObject(i); ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​JSONObject id = data.getJSONObject("id"); ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​String videoId = id.getString("videoId"); ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​JSONObject snippet = data.getJSONObject("snippet"); ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​String title = snippet.getString("title"); ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​String description = snippet.getString("description"); ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​JSONObject thumbnails = snippet.getJSONObject("thumbnails"); ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​JSONObject medium = thumbnails.getJSONObject("medium"); ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​String thumbUrl = medium.getString("url"); ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​JSONObject high = thumbnails.getJSONObject("high"); ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​String url = high.getString("url"); ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​Youtube youtube = new Youtube(videoId, title, description, thumbUrl, url); ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​YoutubeArrayList.add(youtube); ​​​​​​​​​​​​​​​​​​​​​​​​​​​​} ​​​​​​​​​​​​​​​​​​​​​​​​​​​​adapter.notifyDataSetChanged(); ​​​​​​​​​​​​​​​​​​​​​​​​} catch (JSONException e) { ​​​​​​​​​​​​​​​​​​​​​​​​​​​​Toast.makeText(MainActivity.this, "파싱 에러", Toast.LENGTH_SHORT).show(); ​​​​​​​​​​​​​​​​​​​​​​​​​​​​e.printStackTrace(); ​​​​​​​​​​​​​​​​​​​​​​​​} ​​​​​​​​​​​​​​​​​​​​} ​​​​​​​​​​​​​​​​}, ​​​​​​​​​​​​​​​​new Response.ErrorListener() { ​​​​​​​​​​​​​​​​​​​​@Override ​​​​​​​​​​​​​​​​​​​​public void onErrorResponse(VolleyError volleyError) { ​​​​​​​​​​​​​​​​​​​​​​​​// 프로귞레슀 바륌 유저의 눈에서 사띌지게 하는 윔드 ​​​​​​​​​​​​​​​​​​​​​​​​progressBar.setVisibility(View.GONE); ​​​​​​​​​​​​​​​​​​​​​​​​Toast.makeText(MainActivity.this, "넀튞워크 통신 에러", Toast.LENGTH_SHORT).show(); ​​​​​​​​​​​​​​​​​​​​} ​​​​​​​​​​​​​​​​} ​​​​​​​​); ​​​​​​​​queue.add(request);

 

 

 

쀑간에 //삭제할 부분은 삭제핎죌고, //추가할 부분은 삭제한 ê·ž 자늬에 새로욎 얎댑터륌 추가핎죌멎 된닀.

java
ë‹«êž°
// 삭제할 부분 YoutubeArrayList.clear(); // Ʞ졎 데읎터 쎈Ʞ화 adapter = new YoutubeAdapter(MainActivity.this, YoutubeArrayList); recyclerView.setAdapter(adapter); // 추가할 부분 adapter.notifyDataSetChanged();

 

 

 

 

+

<Retrofit2 띌읎람러늬>

 

4번 대신에 MainActivity에 읎 부분을 작성핎쀀닀.

java
ë‹«êž°
private void addNetworkData() { ​​​​​​​​progressBar.setVisibility(View.VISIBLE); ​​​​​​​​Retrofit retrofit = NetworkClient.getRetrofitClient(MainActivity.this); ​​​​​​​​PostingApi api = retrofit.create(PostingApi.class); ​​​​​​​​Call<PostingList> call = api.getPostingList("Bearer " + token, offset, limit ); ​​​​​​​​call.enqueue(new Callback<PostingList>() { ​​​​​​​​​​​​@Override ​​​​​​​​​​​​public void onResponse(Call<PostingList> call, Response<PostingList> response) { ​​​​​​​​​​​​​​​​progressBar.setVisibility(View.GONE); ​​​​​​​​​​​​​​​​if(response.isSuccessful()){ ​​​​​​​​​​​​​​​​​​​​PostingList postingList = response.body(); ​​​​​​​​​​​​​​​​​​​​count = postingList.count; ​​​​​​​​​​​​​​​​​​​​offset = offset + count; ​​​​​​​​​​​​​​​​​​​​postingArrayList.addAll( postingList.items ); ​​​​​​​​​​​​​​​​​​​​adapter.notifyDataSetChanged(); ​​​​​​​​​​​​​​​​}else{ ​​​​​​​​​​​​​​​​} ​​​​​​​​​​​​}