如何在 Android 和 iOS 上的客户端和服务器之间发送 Java 对象?

How can I send Java object between client and server on Android and iOS?

我有一个客户端和一个服务器,它们都是用 Java 编写的,并且共享 Java class 应该在彼此之间发送的内容。我不确定我可以在移动设备上为此使用哪些库,因为我不知道 Dalvik 支持什么,RoboVM 支持什么等。不确定在这种情况下 Gluon Mobile 可以为我做什么。

具体来说,我有一个如下所示的文件:

class Data {
    IntegerProperty int1 = new SimpleIntegerProperty(4);
    ObjectProperty<Person> person = new SimpleObjectProperty();
    ObservableList<Contact> contacts = FXCollections.observableArrayList();
    // other properties
    // also add the getters for the properties and the getters and setters for the values
}

PersonContact 与上面类似 - 它们主要包含数据属性和一些用于在内部(私有)列表中添加和删除的方法等。基本上它们就像 beans 或 POJO带有属性包装器。这是需要在服务器和客户端之间发送的数据,但 只有包装的值很重要 - 而不是绑定 。这使我想到了关于序列化的观点:javaFX 属性不可序列化,因此建议 here 使上述 class 可外部化并写入和读取包装值。

最终我不在乎我是否需要做这些定制的东西(尽管它需要很多工作)或者是否有解决方法。我在服务器上需要一个客户端可以调用的 Data receiveDatafor(...) 方法,服务器获取 Data data 和 returns 它。客户端和服务器每个都有自己与 Data 对象无关的绑定。

目前我们在桌面内部使用 RMI。我读到 RMI 不受支持,无论如何它可能不是一个很好的选择,但它确实允许发送 java 对象真的很容易。 JavaEE has websockets 可以传输对象的二进制形式,但它是 JavaEE,所以我猜不支持。我不反对 JSONing 和作为文本发送,但它似乎比序列化更有效 - 可能是错误的。通信方法应支持加密,例如在发送密码时。我有哪些选择?

在客户端-服务器通信方面,您可以看看 Gluon Connect 和 Gluon CloudLink。

胶子连接

开源 library:

Gluon Connect is a client-side library that simplifies binding your data from any source and format to your JavaFX UI controls. It works by retrieving data from a data source and converting that data from a specific format into JavaFX observable lists and observable objects that can be used directly in JavaFX UI controls.

它也是 Charm 依赖项的一部分,因此您在创建新的 Gluon 项目时已经包含了它。

请参阅有关如何创建 FileProvider 或 RestProvider, and also the GluonConnectRestProvider sample 的文档。

正如文档已经提到的:使用 RestClient,您可以 "convert" 将 REST 端点放入 ObservableList:

// create a RestClient to the specific URL
RestClient restClient = RestClient.create()
    .requestMethod(RestClient.Method.GET)
    .host("https://api.stackexchange.com")
    .path("/2.2/errors");

// retrieve a list from the DataProvider
GluonObservableList<Error> errors = DataProvider
    .retrieveList(restClient.buildListDataReader(Error.class));

// create a JavaFX ListView and populate it with the retrieved list
ListView<Error> lvErrors = new ListView<>(errors);

Notes 示例使用 Gluon Connect 本地存储便笺和设置。

请注意,这些示例使用了 JavaFX POJO(即错误、注释和设置使用属性)。

Gluon CloudLink

Gluon CloudLink 使企业和移动开发人员能够轻松地将他们的不同服务和应用程序连接在一起,从而实现移动应用程序、企业基础设施和云系统之间的双向通信。

数据存储在云端,您(作为管理员)可以通过仪表板访问它。

查看相关文档 here

查看 PWS-GluonCloudLink-Whiteboard sample:云端后端应用程序的完整演示 (webapp-mobile) 运行 (Pivotal Web Services)和移动客户端 (mobile app)。

在客户端,一旦你得到一个有效的GluonClient,你就可以检索一个可观察的项目列表:

public GluonObservableList<Item> retrieveItems() {
    GluonObservableList<Item> items = DataProvider.retrieveList(gluonClient.createListDataReader("items", Item.class));
    return items;
}

如您所见,在客户端中您不处理 REST 端点,json 序列化...一切都只是 JavaFX 可观察值。与后端的连接是在 CloudLink 中通过 Dashboard 应用程序设置的,定义了一个 REST Connector