Android Studio,App引擎;在生成的代码中添加JPA,数据访问层,业务层的位置

时间:2014-01-07 23:57:17

标签: google-app-engine android-studio

以下: 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)

所以我猜业务逻辑层在G​​CMIntentServices中(注册设备,取消注册,处理来自GCM的消息)

这是对这些作品的准确理解吗?

因此,如果我想添加一个访问数据存储区的端点,我应该遵循这个组织(注意模型包中的所有类都扩展json示例:public final class Key extends com.google.api.client.json.GenericJson - 这是推荐的建模方式,还是有更多'googly')

1 个答案:

答案 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) {
    }
}

祝你好运!