好的,这似乎是一个愚蠢的问题,但我对云计算/谷歌应用引擎等真的很陌生。为了更熟悉它,我开始使用 developer.google.com 的一些教程,基本上遵循教程,然后尝试对提供的代码片段进行小的更改,以确保我真正理解它的工作方式,而不仅仅是复制/粘贴并将一切视为理所当然。
问题是我在以下方面有点卡住了:Android 和 App Engine 实际通信的方式。我目前正在做这个教程( https://developers.google.com/eclipse/docs/endpoints-addentities)。问题是以下代码(客户端,在 Android 上):
public class EndpointsTask extends AsyncTask<Context, Integer, Long> {
protected Long doInBackground(Context... contexts) {
Noteendpoint.Builder endpointBuilder = new Noteendpoint.Builder(
AndroidHttp.newCompatibleTransport(),
new JacksonFactory(),
new HttpRequestInitializer() {
public void initialize(HttpRequest httpRequest) { }
});
Noteendpoint endpoint = CloudEndpointUtils.updateBuilder(
endpointBuilder).build();
try {
Note note = new Note().setDescription("Note Description");
String noteID = new Date().toString();
note.setId(noteID);
note.setEmailAddress("E-Mail Address");
Note result = endpoint.insertNote(note).execute();
} catch (IOException e) {
e.printStackTrace();
}
return (long) 0;
}
}
据我的理解,此时,就云计算而言,我推断Android与云之间的通信是通过端点对象执行的,其中端点是:
Noteendpoint endpoint = CloudEndpointUtils.updateBuilder (endpointBuilder).build();
此外,updateBuilder() 方法如下所示:
public static <B extends AbstractGoogleClient.Builder> B updateBuilder(
B builder) {
if (LOCAL_ANDROID_RUN) {
builder.setRootUrl(LOCAL_APP_ENGINE_SERVER_URL_FOR_ANDROID
+ "/_ah/api/");
}
// only enable GZip when connecting to remote server
final boolean enableGZip = builder.getRootUrl().startsWith("https:");
builder.setGoogleClientRequestInitializer(new GoogleClientRequestInitializer() {
public void initialize(AbstractGoogleClientRequest<?> request)
throws IOException {
if (!enableGZip) {
request.setDisableGZipContent(true);
}
}
});
return builder;
}
我知道数据存储中的插入是通过 insertNote() 执行的——基本上,它执行基本的标准插入方法。
我的问题是,我无法真正了解从我的 Android 设备发送的信息在云中的何处被捕获。更具体地说,我正在发送一个对象,但我无法真正看到该对象在云中的接收位置。可能在这种基本应用程序中,没有那么相关,但我想开发一个具有以下结构的应用程序:我正在使用 REST 从我的 Android 设备发送数据。我正在开发我的服务器端代码)(将在云端)。在我的服务器端代码将接收我从 Android 发送的数据 -> 处理该数据 -> 在数据库中添加一些内容(存储在云中的数据库)(这是用非常原始的术语解释的基本原理)。这就是为什么我真的很想了解它的工作方式,到目前为止,我真的看不到我的数据在服务器端的接收位置。我假设这背后可能有一些自动机制?如果是这样,我真的很感兴趣,如果你能指出我,我怎么能以编程方式做到这一点。
另外,我想提一下,这段代码工作得很好,所以没有错误,我只是在理解与它相关的所有细节方面有问题。
谢谢你。
稍后编辑:我的数据库将是 App Engine Datastore。主要问题是我无法真正理解我的 Android 应用程序和 Google App Engine 应用程序之间的通信方式(我将使用从 Android 收到的数据进行所有必要的计算)。我真的可以使用更“明显”/解释性(对于傻瓜)的代码片段,我实际上看到我从 Android 发送的对象是在 Google App Engine 应用程序中接收的。当然,我看到了结果,使用Datastore Viewer,显示数据插入到数据库中。我感兴趣的是,我实际上如何在我的 Google App Engine 应用程序中发送数据,在那里接收它并对其执行一些操作,并且只有在我将它添加到数据库中之后。