Retrieves the next Page object using the next page token, or null if there are no more
pages. The hasNextPage() method can be used to check if a Page object is available.
Returns a future for the Page object, retrieved using the next page token. If there are no more
pages, returns a future which will immediately provide null. The hasNextPage() method can be
used to check if a Page object is available.
Returns an iterable that traverses all the elements of the underlying data source. The data is
fetched lazily page by page, where each page may contain multiple elements. A new page is
fetched whenever the elements of any particular page are exhausted.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-08-28 UTC."],[[["\u003cp\u003eThis page documents the \u003ccode\u003eAbstractPage\u003c/code\u003e class, which provides a partial implementation of the \u003ccode\u003eAsyncPage\u003c/code\u003e interface for handling paged responses.\u003c/p\u003e\n"],["\u003cp\u003eThe latest version of \u003ccode\u003eAbstractPage\u003c/code\u003e is 2.63.1, and the page lists numerous previous versions from 2.62.0 down to 2.7.1 with links to their respective documentation.\u003c/p\u003e\n"],["\u003cp\u003e\u003ccode\u003eAbstractPage\u003c/code\u003e has several methods for retrieving data, including \u003ccode\u003egetNextPage\u003c/code\u003e, \u003ccode\u003egetNextPageAsync\u003c/code\u003e, \u003ccode\u003egetValues\u003c/code\u003e, and \u003ccode\u003eiterateAll\u003c/code\u003e, with several returning an ApiFuture object, such as \u003ccode\u003ecreatePageAsync\u003c/code\u003e and \u003ccode\u003egetNextPageAsync\u003c/code\u003e.\u003c/p\u003e\n"],["\u003cp\u003eThe class also includes methods for managing page tokens and determining the presence of additional pages using \u003ccode\u003egetNextPageToken\u003c/code\u003e and \u003ccode\u003ehasNextPage\u003c/code\u003e respectively, with the \u003ccode\u003egetNextPage()\u003c/code\u003e method returning null if there are no more pages.\u003c/p\u003e\n"],["\u003cp\u003eThe \u003ccode\u003eAbstractPage\u003c/code\u003e class is generic and utilizes four type parameters: \u003ccode\u003eRequestT\u003c/code\u003e, \u003ccode\u003eResponseT\u003c/code\u003e, \u003ccode\u003eResourceT\u003c/code\u003e, and \u003ccode\u003ePageT\u003c/code\u003e, to manage request, response, resource, and page types respectively, and has a constructor that uses a PageContext and ResponseT object.\u003c/p\u003e\n"]]],[],null,["# Class AbstractPage<RequestT,ResponseT,ResourceT,PageT> (2.69.0)\n\nVersion latestkeyboard_arrow_down\n\n- [2.69.0 (latest)](/java/docs/reference/gax/latest/com.google.api.gax.paging.AbstractPage)\n- [2.68.2](/java/docs/reference/gax/2.68.2/com.google.api.gax.paging.AbstractPage)\n- [2.67.0](/java/docs/reference/gax/2.67.0/com.google.api.gax.paging.AbstractPage)\n- [2.66.0](/java/docs/reference/gax/2.66.0/com.google.api.gax.paging.AbstractPage)\n- [2.65.0](/java/docs/reference/gax/2.65.0/com.google.api.gax.paging.AbstractPage)\n- [2.63.1](/java/docs/reference/gax/2.63.1/com.google.api.gax.paging.AbstractPage)\n- [2.62.0](/java/docs/reference/gax/2.62.0/com.google.api.gax.paging.AbstractPage)\n- [2.61.0](/java/docs/reference/gax/2.61.0/com.google.api.gax.paging.AbstractPage)\n- [2.60.0](/java/docs/reference/gax/2.60.0/com.google.api.gax.paging.AbstractPage)\n- [2.59.1](/java/docs/reference/gax/2.59.1/com.google.api.gax.paging.AbstractPage)\n- [2.58.0](/java/docs/reference/gax/2.58.0/com.google.api.gax.paging.AbstractPage)\n- [2.57.0](/java/docs/reference/gax/2.57.0/com.google.api.gax.paging.AbstractPage)\n- [2.55.0](/java/docs/reference/gax/2.55.0/com.google.api.gax.paging.AbstractPage)\n- [2.54.1](/java/docs/reference/gax/2.54.1/com.google.api.gax.paging.AbstractPage)\n- [2.53.0](/java/docs/reference/gax/2.53.0/com.google.api.gax.paging.AbstractPage)\n- [2.52.0](/java/docs/reference/gax/2.52.0/com.google.api.gax.paging.AbstractPage)\n- [2.51.0](/java/docs/reference/gax/2.51.0/com.google.api.gax.paging.AbstractPage)\n- [2.50.0](/java/docs/reference/gax/2.50.0/com.google.api.gax.paging.AbstractPage)\n- [2.49.0](/java/docs/reference/gax/2.49.0/com.google.api.gax.paging.AbstractPage)\n- [2.48.1](/java/docs/reference/gax/2.48.1/com.google.api.gax.paging.AbstractPage)\n- [2.47.0](/java/docs/reference/gax/2.47.0/com.google.api.gax.paging.AbstractPage)\n- [2.46.1](/java/docs/reference/gax/2.46.1/com.google.api.gax.paging.AbstractPage)\n- [2.45.0](/java/docs/reference/gax/2.45.0/com.google.api.gax.paging.AbstractPage)\n- [2.43.0](/java/docs/reference/gax/2.43.0/com.google.api.gax.paging.AbstractPage)\n- [2.42.0](/java/docs/reference/gax/2.42.0/com.google.api.gax.paging.AbstractPage)\n- [2.41.0](/java/docs/reference/gax/2.41.0/com.google.api.gax.paging.AbstractPage)\n- [2.39.0](/java/docs/reference/gax/2.39.0/com.google.api.gax.paging.AbstractPage)\n- [2.38.0](/java/docs/reference/gax/2.38.0/com.google.api.gax.paging.AbstractPage)\n- [2.37.0](/java/docs/reference/gax/2.37.0/com.google.api.gax.paging.AbstractPage)\n- [2.36.0](/java/docs/reference/gax/2.36.0/com.google.api.gax.paging.AbstractPage)\n- [2.35.0](/java/docs/reference/gax/2.35.0/com.google.api.gax.paging.AbstractPage)\n- [2.34.1](/java/docs/reference/gax/2.34.1/com.google.api.gax.paging.AbstractPage)\n- [2.33.0](/java/docs/reference/gax/2.33.0/com.google.api.gax.paging.AbstractPage)\n- [2.32.1](/java/docs/reference/gax/2.32.1/com.google.api.gax.paging.AbstractPage)\n- [2.31.1](/java/docs/reference/gax/2.31.1/com.google.api.gax.paging.AbstractPage)\n- [2.30.1](/java/docs/reference/gax/2.30.1/com.google.api.gax.paging.AbstractPage)\n- [2.24.0](/java/docs/reference/gax/2.24.0/com.google.api.gax.paging.AbstractPage)\n- [2.23.3](/java/docs/reference/gax/2.23.3/com.google.api.gax.paging.AbstractPage)\n- [2.22.0](/java/docs/reference/gax/2.22.0/com.google.api.gax.paging.AbstractPage)\n- [2.21.0](/java/docs/reference/gax/2.21.0/com.google.api.gax.paging.AbstractPage)\n- [2.20.1](/java/docs/reference/gax/2.20.1/com.google.api.gax.paging.AbstractPage)\n- [2.19.6](/java/docs/reference/gax/2.19.6/com.google.api.gax.paging.AbstractPage)\n- [2.18.7](/java/docs/reference/gax/2.18.7/com.google.api.gax.paging.AbstractPage)\n- [2.17.0](/java/docs/reference/gax/2.17.0/com.google.api.gax.paging.AbstractPage)\n- [2.16.0](/java/docs/reference/gax/2.16.0/com.google.api.gax.paging.AbstractPage)\n- [2.15.0](/java/docs/reference/gax/2.15.0/com.google.api.gax.paging.AbstractPage)\n- [2.14.0](/java/docs/reference/gax/2.14.0/com.google.api.gax.paging.AbstractPage)\n- [2.13.0](/java/docs/reference/gax/2.13.0/com.google.api.gax.paging.AbstractPage)\n- [2.12.2](/java/docs/reference/gax/2.12.2/com.google.api.gax.paging.AbstractPage)\n- [2.11.0](/java/docs/reference/gax/2.11.0/com.google.api.gax.paging.AbstractPage)\n- [2.10.0](/java/docs/reference/gax/2.10.0/com.google.api.gax.paging.AbstractPage)\n- [2.9.0](/java/docs/reference/gax/2.9.0/com.google.api.gax.paging.AbstractPage)\n- [2.8.1](/java/docs/reference/gax/2.8.1/com.google.api.gax.paging.AbstractPage)\n- [2.7.1](/java/docs/reference/gax/2.7.1/com.google.api.gax.paging.AbstractPage) \n\n public abstract class AbstractPage\u003cRequestT,ResponseT,ResourceT,PageT\u003e implements AsyncPage\u003cResourceT\u003e\n\nPartial implementation of [AsyncPage](/java/docs/reference/gax/latest/com.google.api.gax.paging.AsyncPage). \n\nInheritance\n-----------\n\n[java.lang.Object](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html) \\\u003e AbstractPage\\\u003cRequestT,ResponseT,ResourceT,PageT\\\u003e \n\nImplements\n----------\n\ncom.google.api.gax.paging.AsyncPage\\\u003cResourceT\\\u003e \n\nInherited Members\n-----------------\n\n[Object.clone()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#clone--) \n[Object.equals(Object)](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#equals-java.lang.Object-) \n[Object.finalize()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#finalize--) \n[Object.getClass()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#getClass--) \n[Object.hashCode()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#hashCode--) \n[Object.notify()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notify--) \n[Object.notifyAll()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notifyAll--) \n[Object.toString()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#toString--) \n[Object.wait()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait--) \n[Object.wait(long)](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait-long-) \n[Object.wait(long,int)](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait-long-int-)\n\nConstructors\n------------\n\n### AbstractPage(PageContext\\\u003cRequestT,ResponseT,ResourceT\\\u003e context, ResponseT response)\n\n protected AbstractPage(PageContext\u003cRequestT,ResponseT,ResourceT\u003e context, ResponseT response)\n\nMethods\n-------\n\n### createPage(PageContext\\\u003cRequestT,ResponseT,ResourceT\\\u003e context, ResponseT response)\n\n protected abstract PageT createPage(PageContext\u003cRequestT,ResponseT,ResourceT\u003e context, ResponseT response)\n\n### createPageAsync(PageContext\\\u003cRequestT,ResponseT,ResourceT\\\u003e context, ApiFuture\\\u003cResponseT\\\u003e futureResponse)\n\n public ApiFuture\u003cPageT\u003e createPageAsync(PageContext\u003cRequestT,ResponseT,ResourceT\u003e context, ApiFuture\u003cResponseT\u003e futureResponse)\n\n| **Internal Only**: This feature is not stable for application use.\n|\n| *Visible for testing*\n\n### getNextPage()\n\n public PageT getNextPage()\n\nRetrieves the next Page object using the next page token, or `null` if there are no more\npages. The hasNextPage() method can be used to check if a Page object is available.\n\n### getNextPage(int pageSize)\n\n public PageT getNextPage(int pageSize)\n\n### getNextPageAsync()\n\n public ApiFuture\u003cPageT\u003e getNextPageAsync()\n\nReturns a future for the Page object, retrieved using the next page token. If there are no more\npages, returns a future which will immediately provide null. The hasNextPage() method can be\nused to check if a Page object is available.\n\n### getNextPageToken()\n\n public String getNextPageToken()\n\nReturns the next page token from the response, or an empty string if there are no more pages.\n\n### getPageElementCount()\n\n public int getPageElementCount()\n\n### getRequest()\n\n public RequestT getRequest()\n\n### getResponse()\n\n public ResponseT getResponse()\n\n### getValues()\n\n public Iterable\u003cResourceT\u003e getValues()\n\nReturns an iterable over the elements in this page.\n\n### hasNextPage()\n\n public boolean hasNextPage()\n\nReturns true if there are more pages that can be retrieved from the API.\n\n### iterateAll()\n\n public Iterable\u003cResourceT\u003e iterateAll()\n\nReturns an iterable that traverses all the elements of the underlying data source. The data is\nfetched lazily page by page, where each page may contain multiple elements. A new page is\nfetched whenever the elements of any particular page are exhausted."]]