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

整个App用到了三个数据查询:
区块分页查询
区块交易分页查询
区块交易详情查询
上面三个查询语句保存在PlayBook,感兴趣的话可以打开探索一番
完整项目代码
直接clone仓库到本地即可运行,下面是具体的代码讲解。
2.1首页区块分页界面
在MainActivity.java的initData()方法中实现了区块查询的核心逻辑,重点看一下下面代码:
mBlocksByHeightQueryViewModel.getCleanQueryData().observe(this,newObserverCoreKitPagedBeanListBlocksByHeightQuery.Datum(){
@Override
publicvoidonChanged(@NullableCoreKitPagedBeanListBlocksByHeightQuery.DatumcoreKitPagedBean){
//1.handlereturndata
if(coreKitPagedBean.getStatus()==CoreKitBean.SUCCESS_CODE){
if(coreKitPagedBean.getData()!=null){
//newaoldlist
ListBlocksByHeightQuery.DatumoldList=newArrayList();
oldList.addAll(mBlocks);
//setmBlockswithnewdata
mBlocks=coreKitPagedBean.getData();
DiffUtil.DiffResultresult=DiffUtil.calculateDiff(newCoreKitDiffUtil(oldList,mBlocks),true);
//needthisline,otherwisetheupdatewillhavenoeffect
mListBlocksAdapter.setNewListData(mBlocks);
result.dispatchUpdatesTo(mListBlocksAdapter);
refreshNextAndPre();
}
}
//2.viewstatuschangeandloadMorecomponentneed
if(coreKitPagedHelper.isHasMore()){
mListBlocksAdapter.setEnableLoadMore(true);
mListBlocksAdapter.loadMoreComplete();
}else{
mListBlocksAdapter.loadMoreEnd();
}
}
});
由于我们在初始化ABCoreKitClient的时候,设置的ResponseFetcher为ApolloResponseFetchers.CACHE_AND_NETWORK,所以这边其实每次query会走两遍回调事件,为了高效的去重与页面刷新,这边使用的是Android自带的DiffUtil。
2.2区块交易分页界面
具体代码在BlockTxsActivity.java界面中,分页逻辑和首页类似,这里就不重复讲解了,大家看代码即可。
2.3交易详情界面
具体代码在TxsDetailActivity.java界面中,这里使用的是简单的Query查询与结果展示。
3.总结
阅读完文章与代码,并一起运行DemoApp到客户端之后,大家已经完整体验了一遍基于ArcBlockAndroidSDK开发App的过程,ArcBlockAndroidSDK的价值远不止于此,大家可以在此基础上继续探索OCAPPlayground并思考自己的点子,然后结合ArcBlockAndroidSDK在Android客户端上实现它们。
更多专栏文章:http://www.qukuaiwang.com.cn/zhuanlan
声明:本文由入驻区块网专栏作者撰写,观点仅代表作者本人,绝不代表区块网赞同其观点或证实其描述。
ArcBlock区块基石区块基石(ArcBlock)是一个专门用于开发和部署去中心化区块链应用的服务平台...