刚开始使用此服务,文档有点令人困惑。
我使用照片库模板创建了Space
。在这个空间中,我有类型图像,作者和照片库的条目。我的问题是,如何检索图像以便在我的Android应用程序中显示?
要与Contentful Delivery API
进行交互,我知道我必须使用CDAClient
对象和CDAEntry
对象来获取该条目。
我已在onCreate()
类的Fragment
方法中对此进行了定义,如下所示:
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()
显然我正在拍照,但我该如何显示?
答案 0 :(得分:6)
内容类型是描述条目形状的方案。它们主要由作为条目蓝图的字段列表组成。
资产代表空间中的文件。资产可以是任何类型的文件:图像,视频,音频文件,PDF或任何其他文件类型。资产通常通过链接附加到条目。
条目是空间中包含的文档。它们可能代表博客帖子或事件或您为其定义内容类型的任何其他内容。
Contentful中的所有内容都属于空间。您可以考虑像数据库这样的空间,您通常至少有一个项目空间,但可以选择使用单独的空间,例如测试
如上所述,拥有一个包含资产的条目以包含一些关于它的其他元数据是很常见的。例如,考虑Image
类型,它具有以下字段集:
使用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()
方法会推断返回类型以避免显式转换,因此请确保在调用时使用正确的类型。
值得一提的是one(String id)
方法是同步的,并且会在调用线程上执行IO,因此您可以使用one(String id, CDACallback callback)
,或者如果您对RxJava感到满意,那么{{1}它给你一个client.observe()
。
最后要注意的是,在某些情况下,每次创建活动/片段时从网络中获取资源都会被视为浪费,最好将资源持久保存到本地数据库并使其在脱机模式下可访问。为此,您可能需要查看Vault,这是一个注释处理器,可以帮助您以最少的工作量从Contentite上保存Contentful数据,它使用Contentful Sync API从给定空间获取增量更新并减少电池和数据消耗同时也有助于提供更好的离线行为。
Java / Android SDK的JavaDoc位于:http://contentful.github.io/contentful.java/
还有一些开源示例应用程序通过空间模板展示了Vault的使用情况,对于照片库模板,可以在此处使用:https://github.com/contentful/gallery-app-android
干杯!