以下: How does an Android and App Engine Actually communicate?
和 步骤:(AS 0.4.0)新项目,生成App Engine,生成客户端库
我得到一个文件树(很多目录都没有显示):
d20
+src ... (MainActivity class)
d20-appengine
+src
+java
+com.example.d20 (package)
(classes like DeviceInfo, DeviceInfoEndpoint, MessageData, MessageEndpoint)
d20-endpoints
+src
+endpoint-src
+java
+com.example.d20 (package)
+ deviceinfoendpoint (package)
(Classes like Deviceinfoendpoint)
+ model
(Classes like DeviceInfo)
+ messageEndpoint
(Classes like MessageEndpoint)
+ model
(Classes like Key, MessageData)
+main
+ java
+ com.example.d20 (package)
(Classes like RegisterActivity, GCMIntent Service)
问题: 遵循业务逻辑层=>的想法数据访问层=> JPA Plain Old Java 什么是上述来源以及新课程的去向?
从阅读源几天开始,我猜每种类型的端点包中的“模型”包都包含JPA。数据访问层是两个端点包中的类(deviceinfoendpoint和messageEndpoint)
所以我猜业务逻辑层在GCMIntentServices中(注册设备,取消注册,处理来自GCM的消息)
这是对这些作品的准确理解吗?
因此,如果我想添加一个访问数据存储区的端点,我应该遵循这个组织(注意模型包中的所有类都扩展json示例:public final class Key extends com.google.api.client.json.GenericJson - 这是推荐的建模方式,还是有更多'googly')
答案 0 :(得分:1)
我不确定这是否是您的问题,但我会就如何创建与数据存储区交互的端点提供一些意见。
在大多数情况下,您无需更改d20-endpoints部分中的任何代码 - 当您单击生成客户端库并用于从Android应用程序与App Engine数据存储区进行通信时,将为您生成此代码。
要创建新端点,请将实体(如DeviceInfo)添加到d20-appengine。如果它是你的第一个,我会复制文件DeviceInfo并编辑它以满足您的需要。因此,对于这个例子,实体正在创建将被称为医生。所以包括id(doctorName),字段(doctorAddress,doctorAge,yearsInPractice)以及所有getter和setter。然后点击医生 - >工具 - > Google云端工具 - >生成端点
DoctorEndpoint调用从数据存储区插入,检索和删除实体的内容。如果要添加特殊查询,请编辑此DoctorEndpoint。
点击maven appengine更新Google App引擎:更新。等待它完成。然后点击d20-appengine - >工具 - > Google云端工具 - >生成客户端库。等待它完成。我通常第二次这样做,但不确定是否需要appengine:更新。
将自动为您生成d20-endpoints部分,您可以通过在Android应用程序中调用类似的东西从Android应用程序访问它(确保它是doInBackground任务)
private class taskGetDoctor extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
try {
Doctorendpoint.Builder builder = new Doctorendpoint.Builder(AndroidHttp.newCompatibleTransport(),
new JacksonFactory(),null);
builder = CloudEndpointUtils.updateBuilder(builder);
Doctorendpoint endpoint = builder.build();
Doctor doctor = endpoint.getDoctors("drJohn").execute();
} catch (Exception e) {
}
return null;
}
@Override
protected void onPostExecute(String result) {
}
}
祝你好运!