Skip to content
Advertisement

How get all results from github search api?

I need to get all results with github search api with pagination using. Now I use request: https://api.github.com/search/repositories?q=lib&page=1&per_page=20 I read that the responses also includes the Link header which contains a ready-made URL to the next page. In response I have link https://api.github.com/search/repositories?q=lib&page=2&per_page=20> and link to the last page: https://api.github.com/search/repositories?q=java&page=50&per_page=20 But I don’t understand how can I to implement transition to the next page using these links.

Advertisement

Answer

You can create a variable to keep track of your current page. & increment it on the success each time until your list size becomes equal to total_count.

on RecyclerView end reached method can be called again.

I have tried to demonstrate the example as following please use the actual calls & stuff that you’re using. just understand the pattern.

public class MainActivity extends AppCompatActivity {

    private int page = 1;

    private ArrayList<Object> items = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        call();
    }
    
    //dummy call
    private void call(){
        String url = "https://api.github.com/search/repositories?q=lib&page=" + page + "&per_page=20";
        //pass the new url with page to call or just params as per your need
        new ResponseListener(url){
            @Override
            public void onSuccess(ArrayList<Object> list,Integer totalCount) {
                //parse & add items
                items.addAll(list);
                //check if you have items same as total count.
                // If true then it means you've reached the end
                if (items.size() < totalCount){
                    //increase the page number for next call
                    page++;
                }
            }

            @Override
            public void onError(Exception e) {
                e.printStackTrace();
            }
        };
    }


}
User contributions licensed under: CC BY-SA
6 People found this is helpful
Advertisement