我在第二步here后遇到了问题。
我真的不明白这个示例除了返回简单的toast消息之外还做了什么。它如何利用API来显示该消息?
class EndpointsAsyncTask extends AsyncTask<Pair<Context, String>, Void, String> {
private static MyApi myApiService = null;
private Context context;
@Override
protected String doInBackground(Pair<Context, String>... params) {
if(myApiService == null) { // Only do this once
MyApi.Builder builder = new MyApi.Builder(AndroidHttp.newCompatibleTransport(),
new AndroidJsonFactory(), null)
// options for running against local devappserver
// - 10.0.2.2 is localhost's IP address in Android emulator
// - turn off compression when running against local devappserver
.setRootUrl("http://10.0.2.2:8080/_ah/api/")
.setGoogleClientRequestInitializer(new GoogleClientRequestInitializer() {
@Override
public void initialize(AbstractGoogleClientRequest<?> abstractGoogleClientRequest) throws IOException {
abstractGoogleClientRequest.setDisableGZipContent(true);
}
});
// end options for devappserver
myApiService = builder.build();
}
context = params[0].first;
String name = params[0].second;
try {
return myApiService.sayHi(name).execute().getData();
} catch (IOException e) {
return e.getMessage();
}
}
@Override
protected void onPostExecute(String result) {
Toast.makeText(context, result, Toast.LENGTH_LONG).show();
}
我担心这个样本对我有限的知识太复杂了。运行应用程序时,我如何与Google端点模块“交谈”?具体来说,什么是EndpointsAsyncTask();?
是否有资源列出了我可用的所有方法?是否有更简单的应用与Google Cloud Endpoint通信的示例?
答案 0 :(得分:0)
您可以使用的服务方法由第1节中的后端源定义。
在您发布的示例中,此行:myApiService.sayHi(name).execute() 是对后端的实际调用调用,您通过在后端模块的MyEndpoint.java类中的方法上注释@ApiMethod(“sayHi”)来定义。
您的Android应用定义EndpointsAsyncTask的原因是因为触发网络的调用等慢速操作需要在UI线程之外发生,以避免锁定UI。该演示只是将返回的值放入Toast中,但您可以修改onPostExecute()以根据结果执行任何操作。
有关Google Endpoints的更多信息,请查看: https://cloud.google.com/appengine/docs/java/endpoints/
有关使用Android AsyncTask的信息,请点击此处: http://developer.android.com/reference/android/os/AsyncTask.html