我一直在尝试将生成的 Android 代码用于从本机 android 应用程序部署的 MBO。
接下来的步骤如下:
使用 SAP BAPI (BAPI_FLIGHT_GETLIST) 创建的 MBO
将其部署到无线服务器中
生成代码
将代码复制到 Android 项目
使用生成的代码通过以下步骤从 MBO 访问数据
i) 设置申请详情
Application app = Application.getInstance(); app.setApplicationIdentifier("FlightSearch"); app.setApplicationContext(<android context>); FlightSearchDB.setApplication(app);
ii) 设置身份验证凭据
ConnectionProperties connProps = app.getConnectionProperties(); LoginCredentials loginCredentials = new LoginCredentials(USERNAME, PASSWORD); connProps.setLoginCredentials(loginCredentials); connProps.setServerName(HOST); connProps.setPortNumber(PORT);
iii) 注册连接
if (app.getRegistrationStatus() != RegistrationStatus.REGISTERED) { app.registerApplication(TIMEOUT); } else { app.startConnection(TIMEOUT); }
iv) 设置同步参数
ConnectionProfile profile = FlightSearchDB.getSynchronizationProfile(); profile.setServerName(HOST); profile.setPortNumber(2480); profile.setNetworkProtocol("http,https"); profile.setDomainName("default"); profile.setAsyncReplay(true); profile.save();
v) 开始同步
FlightSearchDB.synchronize(new MySyncStatusListener());
我可以在 MySyncStatusListener 的 objectSyncStatus() 方法中看到状态。
最初它尝试上传数据,因为第一次运行没有本地数据,它发送一些空值,然后等待来自服务器的确认。我长时间获得 APPLICATION_SYNC_RECEIVING_UPLOAD_ACK 状态并且从未从服务器获得确认,因此数据同步进入死锁。
同时我试图检查服务器日志,它显示:
2012-06-21 02:03:26.135 CONSOLE MMS pool-1-thread-18-/registration/RegistrationServlet [com.sybase.sup.server.Console]6146
2012-06-21 02:03:25.491 CONSOLE MMS pool-1-thread-16-/registration/RegistrationServlet [com.sybase.sup.server.Console]6038
如果我禁用代码的同步部分,我可以运行以下代码,但结果始终为 0,这很明显,因为没有同步就没有可用的本地数据。
vi) Access Database
if(!FlightSearchDB.databaseExists()){
FlightSearchDB.createDatabase();
}
FlightSearchDB.openConnection();
GenericList<Flight> flights = Flight.findAll();
任何人都可以告诉我,如果代码/配置问题有任何问题,我需要解决以访问数据。