on create 함수에 recyclerView.addOnScrollListener 함수를 추가한 후 오버라이드 를 필수로 작성한 후
addNetworkData() 함수를 호출한다.
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 lastpositon=((LinearLayoutManager)recyclerView.getLayoutManager()).findLastCompletelyVisibleItemPosition();
int totalCount = recyclerView.getAdapter().getItemCount();
if(lastpositon+1 == totalCount){
// 네트워크로부터 데이터를 추가로 받아온다.
addNetworkData();
}
}
});
addNetworkData()
private void addNetworkData() {
progressBar.setVisibility(View.VISIBLE);
RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
// 2. request 만든다.
String url = "https://www.googleapis.com/youtube/v3/search?key="+Config.YOUYUBE_KEY+
"&part=snippet&maxResults=20&order=date&q="+text+"&type=video"+"&pageToken"+nextPageToken;
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 dataArray = response.getJSONArray("items");
for (int i = 0; i < dataArray.length(); i++) {
JSONObject item = dataArray.getJSONObject(i);
JSONObject snippet = item.getJSONObject("snippet");
String title = snippet.getString("title");
String body = snippet.getString("description");
JSONObject thumbnails = snippet.getJSONObject("thumbnails");
JSONObject thumbnail = thumbnails.getJSONObject("default");
JSONObject high = thumbnails.getJSONObject("high");
String url2 = high.getString("url");
String url = thumbnail.getString("url");
JSONObject ids = item.getJSONObject("id");
String id=ids.getString("videoId");
Posting posting = new Posting(title, body, url, id, url2);
postingArrayList.add(posting);
Log.i("MAIN",postingArrayList.toString());
}
adapter = new PostingAdapter(MainActivity.this, postingArrayList);
recyclerView.setAdapter(adapter);
} catch (JSONException e) {
Toast.makeText(MainActivity.this,
"파싱 에러",
Toast.LENGTH_SHORT).show();
Log.i("EMPLOYER MAIN", e.toString());
return;
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
progressBar.setVisibility(View.GONE);
Toast.makeText(MainActivity.this,
"네트워크 통신 에러",
Toast.LENGTH_SHORT).show();
Log.i("EMPLOYER MAIN", error.toString());
}
}
);
// 3. 네트워크로 API 호출
queue.add(request);
}
url에 pageToken 파라미터를 추가한다. 토큰은
api 호출할때 알 수 있다.
'Aandroid Studio > 기능' 카테고리의 다른 글
[android] open intent 함수 (1) | 2024.06.11 |
---|---|
[android] actionbar menu ,뒤로가기 버튼 생성 (0) | 2024.06.11 |
[android]AlertDialog 예, 아니오 선택창 (0) | 2024.06.10 |
[android] RecyclerView와 Adapter를 이용하여 리스트를 화면에 표시하는 방법 (1) | 2024.06.10 |
[android] SharedPreferences 를 이용한, 데이터 저장과 불러오기 (0) | 2024.06.07 |