> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://contentful.com/developers/docs/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://contentful.com/_mcp/server. # Getting Started with Contentful and Android > This guide will help you get started with your first basic hello world style Android app using Contentful with a demo space. This guide will show you how to get started using our [Android client library](https://github.com/contentful/contentful.java) to consume content. Contentful's Content Delivery API (CDA) is a read-only API for retrieving content from Contentful. All content, both JSON and binary, is fetched from the server closest to a user's location by using our global CDN. We publish client libraries for various languages to make developing applications easier. ## Requirements This tutorial assumes that you understand the [Contentful data model](/concepts/data-model). ## Authentication For every request, clients [need to provide an API key](/references/authentication), which is created per space and used to delimit applications and content classes. You can create an access token using the [Contentful web app](https://be.contentful.com/login) or the [Content Management API](/references/content-management-api/overview#/reference/api-keys/create-an-api-key). ## Create a new Android project Create a new project in Android Studio using the 'Blank Activity' template, and name it whatever you wish. ## Dependencies and permissions This guide uses [RXAndroid](https://github.com/ReactiveX/RxAndroid) in the examples, which allows you to fetch results without tying up the main Android thread. To include the CDA client library, add the following lines to the *build.gradle* file: ```gradle dependencies { // [...] compile 'com.contentful.java:java-sdk:9.0.1' compile 'io.reactivex.rxjava2:rxandroid:2.0.1' } ``` Add the internet permission to the *AndroidManifest.xml* file so your app can access the Contentful APIs: ```xml ... ``` ## Creating a client Add the following code to the `onCreate` method to create a `CDAClient` that communicates with the Contentful APIs: ## Initialize the client You need an API key and a space ID to initialize a client. You can use the API key and space ID pre-filled below from our example space or replace them with your own values. ```java CDAClient client = CDAClient.builder() .setSpace("") .setToken("") .build(); ``` Use the [Gson](https://github.com/google/gson) library to make JSON responses easier to read. ```java Gson gson = new GsonBuilder().setPrettyPrinting().create(); ``` ## Fetching specific items If you want to fetch a specific entry, use the `id` of the entry inside a `.one` method: ```java client.observe(CDAEntry.class) .one("") .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()) .subscribe(new Subscriber() { CDAEntry result; @Override public void onCompleted() { Log.i("Contentful", gson.toJson(result)); } @Override public void onError(Throwable error) { Log.e("Contentful", "could not request entry", error); } @Override public void onNext(CDAEntry cdaEntry) { result = cdaEntry; } }); ``` ``` I/Contentful: CDAEntry{id='``'} ``` ## Fetching all data from a space To fetch all entries, create a new observable that watches for changes, in this case, fetching all entries from the specified space with the `all` method and content type with the `where` method: ```java client.observe(CDAEntry.class) .where("content_type", "") .all() .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()) .subscribe(new Subscriber() { CDAArray result; @Override public void onCompleted() { for (CDAResource resource : result.items()) { CDAEntry entry = (CDAEntry) resource; Log.i("Contentful", entry.getField("productName").toString()); } } @Override public void onError(Throwable error) { Log.e("Contentful", "could not request entry", error); } @Override public void onNext(CDAArray cdaArray) { result = cdaArray; } }); ``` ``` I/Contentful: Hudson Wall Cup I/Contentful: SoSo Wall Clock I/Contentful: Whisk Beater I/Contentful: Playsam Streamliner Classic Car, Espresso ``` The `onNext` method saves the array of entries and the `onCompleted` method is called once all entries are fetched from the API. The `onError` method allows you to handle any problems. [1]: https://github.com/contentful/contentful.java [4]: /sdks/android/tutorials/getting-started-with-contentful-and-android/ > This guide will help you get started with your first basic hello world style Android app using Contentful with a demo space.