使用SAP OData offline库实现Android应用的离线(offline)模式
打开Android studio,在工程的build.gradle里加入下面的依赖,导入SAP OData offline库:
implementation group:‘com.sap.cloud.android’, name:‘offline-odata’, version: sdkVersion
点击Sync now:
新建一个java文件:SAPServiceManager.java
使用的import如下:
import android.content.Context;
import android.util.Log;
import android.widget.Toast;
import com.sap.cloud.mobile.odata.core.AndroidSystem;
import com.sap.cloud.mobile.odata.offline.OfflineODataDefiningQuery;
import com.sap.cloud.mobile.odata.offline.OfflineODataException;
import com.sap.cloud.mobile.odata.offline.OfflineODataParameters;
import com.sap.cloud.mobile.odata.offline.OfflineODataProvider;
import java.net.MalformedURLException;
import java.net.URL;// 将OfflineODataProvider注释掉,改为OfflineODataProvider
//private OnlineODataProvider provider;
private OfflineODataProvider provider;
private static final String TAG = SAPServiceManager.class.getName();OData offiline datastore的setup方法:public void openODataStore(Action0 callback, Context context) {setupOfflineOData(callback, context);
}private void setupOfflineOData(Action0 callback, Context context) {try {if (configurationData.loadData()) {Toast.makeText(context, "Opening the offline store which may take a few moments the first time it is opened.", Toast.LENGTH_LONG).show();//Initialize application context for use by OfflineODataProviderAndroidSystem.setContext(context);//commonly set parameters include setStoreEncryptionKey, setStoreName, setStorePathOfflineODataParameters offParam = new OfflineODataParameters();String serviceUrl = configurationData.getServiceUrl();URL url = new URL(serviceUrl + CONNECTION_ID_ESPMCONTAINER);provider = new OfflineODataProvider(url, offParam, ClientProvider.get());//Specifies which entities we wish to include in the offline storeprovider.addDefiningQuery(new OfflineODataDefiningQuery("Customers", "Customers", false));}} catch (MalformedURLException e) {e.printStackTrace();} catch (OfflineODataException e) {e.printStackTrace();}//opens the offline store. This can take a minute or so the first time it is called as it is created and populated.Log.d(TAG, "About to call open on the offline store.");provider.open(() -> {Log.d(TAG, "Offline store opened.");eSPMContainer = new ESPMContainer(provider);callback.call();syncOfflineData(); //TODO could be triggered via a menu action}, (OfflineODataException offlineODataException) -> {Log.d(TAG, "Offline store did not open.", offlineODataException);});
}public void syncOfflineData() {//send the local changes to the back end OData serviceLog.d(TAG, "About to call provider.upload.");provider.upload(() -> {Log.d(TAG, "Successfully uploaded the changed data.");//get changes from the back end OData service.provider.download(() -> {Log.d(TAG, "Successfully downloaded the changed data.");}, (error) -> {Log.d(TAG, "Failed when downloading the changed data with error: " + error.getMessage());});}, (error) -> {Log.d(TAG, "Failed when uploading the changed data with error: " + error.getMessage());});
}public String getServiceRoot() {if (configurationData.loadData()) {String serviceUrl = configurationData.getServiceUrl();if (serviceRoot == null) {serviceRoot = serviceUrl + "/" + CONNECTION_ID_ESPMCONTAINER;}}else {throw new IllegalStateException("SAPService manager configurationData.loadData() failed.");}return serviceRoot;
}
新建LogonActivity.java,调用之前实现的sapServiceManager.openODataStore:
第一次运行应用,会发现offline OData store的初始化日志:
现在可以测试离线模式了,打开移动设备的飞行模式:
选择存储于OData offline store上的某个客户,点击编辑按钮:
修改city字段:
关闭该应用,关闭设备的飞行模式,再启动该应用,在logcat里能观察到之前处于离线模式修改的数据已经自动同步到了后台online store里:
要获取更多Jerry的原创文章,请关注公众号"汪子熙":
使用SAP OData offline库实现Android应用的离线(offline)模式相关推荐
- SAP OData请求是如何通过OData Plugin路由到OData Offline Data Store的
I am reading Offline OData plugin introduction from SAP Help, There is one sentence "OData requ ...
- SAP OData 开发教程 - 从入门到提高(包含 SEGW, RAP 和 CDP)
文章目录 SEGW - Gateway Service Builder 使用 Restful ABAP Programming 编程模型(简称 RAP) 开发 OData 服务 使用 SAP Clou ...
- SAP OData 开发实战教程:从入门到提高
文章目录 SEGW - Gateway Service Builder 使用 Restful ABAP Programming 编程模型(简称 RAP) 开发 OData 服务 使用 SAP Clou ...
- NDK交叉编译及so库导入Android项目
前言 记录 NDK交叉编译及so库导入Android项目 的简单步骤,以备后续用到时查看. 环境 在Linux和Mac环境下,分别编译输出so库. Red Hat Enterprise Linux 8 ...
- 实战 Deep Insert (SAP OData Service 实战系列)
在实际开发中我们经常会遇到需要保存多层实体结构到后台系统的场景,比如SAP各种凭证都是抬头和行项目一起保存,我今天就介绍一下创建深度插入OData实体的详细步骤. 今天的例子是创建客户发票凭证,需要同 ...
- 【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 拷贝 lib7zr.so 动态库到 Android Studio 工程 | 配置 build.gradle 构建脚本 )
文章目录 一.拷贝 lib7zr.so 动态库到 Android Studio 工程 二.配置 Module 下的 build.gradle 构建脚本 三.参考资料 一.拷贝 lib7zr.so 动态 ...
- 【Android 应用开发】 Android 各种版本简介 ( Support 支持库版本 | Android Studio 版本 | Gradle 版本 | jcenter 库版本 )
初学者遇到 Android Studio, 导入工程后, 会出现各种奇葩错误, 如果管理好各个插件, gradle, SDK, SDK Tools, 各种官方依赖库 的版本, 会将错误大大的减少; 这 ...
- 【学习笔记】SAP OData服务简介
SAP OData服务简介 之前有一篇博文介绍过OData:OData简介 OData服务在数据提取方面有如下优势: 适合流行的REST模式: 将数据服务提供给任何可以进行HTTP调用的设备或者客户端 ...
- 什么是SAP OData Model Creator
The SAP OData Model Creator is a web site where your OData service metadata is transformed into a Me ...
最新文章
- 数据科学工具 Jupyter Notebook 教程(二)
- 为SQL Server Express 2012启用远程连接
- 说实话,你工作5年,不知道什么是Java agent技术,让我很吃惊...
- 简单地使用线程之一:使用异步编程模型
- Linux—shell脚本化工具模板
- 软考网络工程师学习笔记2-数据通信基础
- 视频号,近距离、更快接触数据库技术资讯!
- linux操作系统中的netstat命令查看端口状态的使用和window操作系统查看端口号
- eltable 无数据文案修改_el-table的二次封装详细版(一)
- php 压缩及解压文件,php zip文件的解压与压缩
- new对象后的代码块(匿名类)
- Java旅游管理系统
- 中国省份、市区、地区县信息表
- 【Python计量】RESET模型设定偏误检验
- element组件官网
- EXCEL表单元格内特定内容的提取
- 使用java爬取国家统计局的12位行政区划代码
- 小封装SOT23车规加密认证芯片ALPU-CV
- 调试页面或样式一定要关闭拦截广告的插件
- 礼盒抖动动画(CocosCreator)
热门文章
- set 赋值(转载)
- 网络学习(十二)文本模式安装Red Hat Linux 9
- [收集]美女与野兽——萨尔和吉安娜的绯闻
- 关于使用WindowsUpdate 或 Windows 自动升级时碰到的 svchost.exe 进程 CPU 资源占用过高的问题的相关信息...
- Fiddler监听Https请求响应
- C#读取Excel表格数据到DataGridView中和导出DataGridView中的数据到Excel
- Android中调用webservice的工具类
- android:SQlite
- hdu1285 拓扑排序(裸)
- window 安装python 环境