如何从 Android 中的 Contentful 中的 space 检索条目
How to retrieve entries from a space in Contentful in Android
今天才开始使用这项服务,文档有点混乱。
我使用相册模板创建了 Space
。在这个 Space 中,我有图像、作者和照片库类型的条目。我的问题是,如何检索图像以显示在我的 android 应用程序中?
要与 Contentful Delivery API
交互,我知道我必须使用 CDAClient
对象和 CDAEntry
对象作为我试图获取的条目。
我已经在我的 Fragment
class 的 onCreate()
方法中定义了这个:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = getActivity();
client = CDAClient.builder()
.setSpace("id-of-the-space-am-accessing")
.setToken("the-access-token")
.build();
entry = client.fetch(CDAEntry.class).one("the id of the image I want to retrieve");
}
在 onCreateView()
方法中,我试图这样查看结果:
Log.e(TAG, "Result: " + entry.toString());
当我 运行 应用程序时,我在 Logcat 中得到这个:
E/NEWS ACTIVITY﹕ Result: CDAEntry{id='2YhtjbebgscIwO2keYEa4O'}
此 ID 与我传递给 client.fetch(CDAEntry.class).one()
的图像的 ID 匹配
很明显我正在获取图像,但我该如何显示它?
内容类型
Content Types are schemes describing the shape of Entries. They mainly consist of a list of fields acting as a blueprint for Entries.
资产
Assets represent files in a Space. An asset can be any kind of file: an image, a video, an audio file, a PDF or any other filetype. Assets are usually attached to Entries through Links.
条目
Entries are the documents contained within a space. They might represent blog posts or events or anything else that you have defined a content type for.
Space
All content in Contentful belongs to a space. You can think of spaces like databases, you will generally have at least one space for a project, but may opt to use a separate space for e.g. testing.
如上所述,为了包含一些额外的 meta-data ,有一个包装资产的条目是很常见的。例如,考虑 Image
类型,它具有以下字段集:
- 标题 - 短文本
- 照片 - Link 到资产
- imageCaption - 长文本
- imageCredits - 长文本
使用 Java/Android SDK,可以通过条目的 getField()
方法访问这些属性:
CDAEntry imageEntry = client.fetch(CDAEntry.class).one("foo");
String title = imageEntry.getField("title");
CDAAsset photo = imageEntry.getField("photo");
String photoUrl = photo.url(); // URL of the linked photo
String imageCaption = imageEntry.getField("imageCaption");
String imageCredits = imageEntry.getField("imageCredits");
请注意,getField()
方法会推断 return 类型以避免显式转换,因此请确保在调用它时使用正确的类型。
值得一提的是 one(String id)
方法是同步的并且会在调用线程上执行 IO,所以你可以使用 one(String id, CDACallback callback)
或者如果你熟悉 RxJava 还有 client.observe()
这给你一个 Observable
.
最后要注意的是,在某些情况下,每次创建 activity/fragment 时从网络获取资源可能被认为是一种浪费,最好将资源保存到本地数据库并在离线模式。为此,您可能需要查看 Vault,它是一个注释处理器,可帮助您以最小的努力通过 SQLite 从 Contentful 持久化数据,它使用 Contentful Sync API 从给定的 space 从而减少电池和数据消耗,同时还有助于提供更好的离线行为。
Java/Android SDK 的 JavaDoc 在这里:http://contentful.github.io/contentful.java/
还有一些 open-source 示例应用程序展示了 Vault 与 space 模板的用法,对于照片库模板,可在此处获得:https://github.com/contentful/gallery-app-android
干杯!
今天才开始使用这项服务,文档有点混乱。
我使用相册模板创建了 Space
。在这个 Space 中,我有图像、作者和照片库类型的条目。我的问题是,如何检索图像以显示在我的 android 应用程序中?
要与 Contentful Delivery API
交互,我知道我必须使用 CDAClient
对象和 CDAEntry
对象作为我试图获取的条目。
我已经在我的 Fragment
class 的 onCreate()
方法中定义了这个:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = getActivity();
client = CDAClient.builder()
.setSpace("id-of-the-space-am-accessing")
.setToken("the-access-token")
.build();
entry = client.fetch(CDAEntry.class).one("the id of the image I want to retrieve");
}
在 onCreateView()
方法中,我试图这样查看结果:
Log.e(TAG, "Result: " + entry.toString());
当我 运行 应用程序时,我在 Logcat 中得到这个:
E/NEWS ACTIVITY﹕ Result: CDAEntry{id='2YhtjbebgscIwO2keYEa4O'}
此 ID 与我传递给 client.fetch(CDAEntry.class).one()
很明显我正在获取图像,但我该如何显示它?
内容类型
Content Types are schemes describing the shape of Entries. They mainly consist of a list of fields acting as a blueprint for Entries.
资产
Assets represent files in a Space. An asset can be any kind of file: an image, a video, an audio file, a PDF or any other filetype. Assets are usually attached to Entries through Links.
条目
Entries are the documents contained within a space. They might represent blog posts or events or anything else that you have defined a content type for.
Space
All content in Contentful belongs to a space. You can think of spaces like databases, you will generally have at least one space for a project, but may opt to use a separate space for e.g. testing.
如上所述,为了包含一些额外的 meta-data ,有一个包装资产的条目是很常见的。例如,考虑 Image
类型,它具有以下字段集:
- 标题 - 短文本
- 照片 - Link 到资产
- imageCaption - 长文本
- imageCredits - 长文本
使用 Java/Android SDK,可以通过条目的 getField()
方法访问这些属性:
CDAEntry imageEntry = client.fetch(CDAEntry.class).one("foo");
String title = imageEntry.getField("title");
CDAAsset photo = imageEntry.getField("photo");
String photoUrl = photo.url(); // URL of the linked photo
String imageCaption = imageEntry.getField("imageCaption");
String imageCredits = imageEntry.getField("imageCredits");
请注意,getField()
方法会推断 return 类型以避免显式转换,因此请确保在调用它时使用正确的类型。
值得一提的是 one(String id)
方法是同步的并且会在调用线程上执行 IO,所以你可以使用 one(String id, CDACallback callback)
或者如果你熟悉 RxJava 还有 client.observe()
这给你一个 Observable
.
最后要注意的是,在某些情况下,每次创建 activity/fragment 时从网络获取资源可能被认为是一种浪费,最好将资源保存到本地数据库并在离线模式。为此,您可能需要查看 Vault,它是一个注释处理器,可帮助您以最小的努力通过 SQLite 从 Contentful 持久化数据,它使用 Contentful Sync API 从给定的 space 从而减少电池和数据消耗,同时还有助于提供更好的离线行为。
Java/Android SDK 的 JavaDoc 在这里:http://contentful.github.io/contentful.java/
还有一些 open-source 示例应用程序展示了 Vault 与 space 模板的用法,对于照片库模板,可在此处获得:https://github.com/contentful/gallery-app-android
干杯!