OCAP 超简易集成攻略(Android 篇)

作者: NateRobinson(ArcBlock 团队移动开发工程师)

前面想必大家已经看到了 iOS 的简易集成攻略,估计 Android 的小伙伴们已经坐不住了,今天就在前几篇的基础上再给大家讲解一下 ArcBlock Android SDK 的快速集成。文章整体的思路同 iOS,会以如何使用 ArcBlock Android SDK 开发一款简单的 App 作为整篇文章的主线,那么让我们开始吧!

1. 阅读详细的 ArcBlock Android SDK 入门文档

详细的 ArcBlock Android SDK 入门文档 建议点开链接通读一遍,文档里面对整个 SDK 的使用做了详细的说明,看完之后再回来看下面的入门文档概括会有一个更清晰的理解。

入门文档概括:

  1. 正确配置 maven,引入 Library
  2. 下载 schema.json,编写 .graphql 文件,并配置好文件目录
  3. 普通数据查询

    • CoreKitBeanMapper 初始化
    • Query 初始化
    • CoreKitViewModel 初始化与数据获取的监听事件设置
  4. 分页数据查询

    • CoreKitPagedHelper 初始化
    • CoreKitBeanMapper 初始化
    • CoreKitPagedViewModel 初始化与数据获取监听事件的设置
  5. 订阅数据与监听

    • 打开对应的 ABCoreKitClient 的 Socket 开关
    • Subscription 初始化
    • CoreKitSubViewModel 初始化与数据获取监听实践设置

另外可能需要额外注意一下的是 CustomType 和 ABCoreKitClient 初始化,这些可以在 ArcBlock Android SDK 入门文档 - 其他配置 找到详细的说明和代码示例。

2. 基于 ArcBlock Android SDK 开发 App 的例子

首先,我们先看看最终要完成 App 的样子,整体功能并不复杂,分页查询区块,并以一个个正方形方块代表一个个发生的交易,方块颜色的深浅由交易的大小决定,点击某个方块进入到交易详情界面,点击查看更多跳转到区块交易分页查看界面:

App 截图

整个 App 用到了三个数据查询:

  • 区块分页查询
  • 区块交易分页查询
  • 区块交易详情查询

上面三个查询语句保存在 PlayBook,感兴趣的话可以打开探索一番

完整项目代码

直接 clone 仓库到本地即可运行,下面是具体的代码讲解。

2.1 首页区块分页界面

在 MainActivity.java 的 initData() 方法中实现了区块查询的核心逻辑,重点看一下下面代码:

mBlocksByHeightQueryViewModel.getCleanQueryData().observe(this, new Observer<CoreKitPagedBean<List<BlocksByHeightQuery.Datum>>>() {
            @Override
            public void onChanged(@Nullable CoreKitPagedBean<List<BlocksByHeightQuery.Datum>> coreKitPagedBean) {
                //1. handle return data
                if (coreKitPagedBean.getStatus() == CoreKitBean.SUCCESS_CODE) {
                    if (coreKitPagedBean.getData() != null) {
                        // new a old list
                        List<BlocksByHeightQuery.Datum> oldList = new ArrayList<>();
                        oldList.addAll(mBlocks);
                        // set mBlocks with new data
                        mBlocks = coreKitPagedBean.getData();
                        DiffUtil.DiffResult result = DiffUtil.calculateDiff(new CoreKitDiffUtil<>(oldList, mBlocks), true);
                        // need this line , otherwise the update will have no effect
                        mListBlocksAdapter.setNewListData(mBlocks);
                        result.dispatchUpdatesTo(mListBlocksAdapter);
                        refreshNextAndPre();
                    }
                }
                //2. view status change and loadMore component need
                if (coreKitPagedHelper.isHasMore()) {
                    mListBlocksAdapter.setEnableLoadMore(true);
                    mListBlocksAdapter.loadMoreComplete();
                } else {
                    mListBlocksAdapter.loadMoreEnd();
                }
            }
        });

由于我们在初始化 ABCoreKitClient 的时候,设置的 ResponseFetcher 为 ApolloResponseFetchers.CACHEANDNETWORK ,所以这边其实每次 query 会走两遍回调事件,为了高效的去重与页面刷新,这边使用的是 Android 自带的 DiffUtil。

2.2 区块交易分页界面

具体代码在 BlockTxsActivity.java 界面中,分页逻辑和首页类似,这里就不重复讲解了,大家看代码即可。

2.3 交易详情界面

具体代码在 TxsDetailActivity.java 界面中,这里使用的是简单的 Query 查询与结果展示。

3. 总结

阅读完文章与代码,并一起运行 Demo App 到客户端之后,大家已经完整体验了一遍基于 ArcBlock Android SDK 开发 App 的过程,ArcBlock Android SDK 的价值远不止于此,大家可以在此基础上继续探索 OCAP Playground 并思考自己的点子,然后结合 ArcBlock Android SDK 在 Android 客户端上实现它们。