我无法从Android应用程序访问Google Cloud Endpoints后端。我使用以下相关工具和库:
com.google.appengine:gradle-appengine-plugin:1.9.49
com.google.appengine:appengine-java-sdk:1.9.49
com.google.appengine:appengine-endpoints:1.9.49
com.google.appengine:appengine-endpoints-deps:1.9.49
我已经使用针对本地开发服务器的物理设备测试文档,这意味着我已将行httpAddress = "0.0.0.0"
添加到后端模块中的build.gradle
,然后使用以下代码连接到后端:
SomeApi.Builder builder = new SomeApi.Builder(AndroidHttp.newCompatibleTransport(), new AndroidJsonFactory(), null);
builder.setApplicationName("someapplicationname");
builder.setRootUrl("http://192.168.1.1:8080/_ah/api/");
builder.setGoogleClientRequestInitializer(new GoogleClientRequestInitializer()
{
@Override
public void initialize(AbstractGoogleClientRequest<?> abstractGoogleClientRequest) throws IOException
{
abstractGoogleClientRequest.setDisableGZipContent(true);
}
});
SomeApi api = builder.build();
然后我使用以下行调用创建的api
的方法:
api.someMethod("Some random string").execute();
这就是问题发生的地方。此方法调用触发指向同一方法调用的以下异常(上面的行):
W/System.err: com.google.api.client.googleapis.json.GoogleJsonResponseException: 401 Unauthorized
W/System.err: at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113)
W/System.err: at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40)
W/System.err: at com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:321)
W/System.err: at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1056)
W/System.err: at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419)
W/System.err: at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352)
W/System.err: at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469)
W/System.err: at se.essvagsystemab.mobiltdispenssystem.licensemanager.simple.fragment.MainFragment$13.doInBackground(MainFragment.java:381)
W/System.err: at se.essvagsystemab.mobiltdispenssystem.licensemanager.simple.fragment.MainFragment$13.doInBackground(MainFragment.java:373)
W/System.err: at android.os.AsyncTask$2.call(AsyncTask.java:304)
W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
W/System.err: at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
W/System.err: at java.lang.Thread.run(Thread.java:761)
奇怪的是,请求甚至无法到达端点。客户端端点库似乎抛出异常,因为服务器日志没有显示任何错误迹象,它包含启动服务器时打印的日志消息,以及它。
我不知道造成这种情况的原因,所以非常感谢任何帮助!
答案 0 :(得分:0)
事实证明我从<div ng-repeat="y in (filteredItems = (x | filter:myFilter:rec))">
- 输出中复制了错误的IP地址,即使我提到我使用的是正确的IP地址。 Hrrm,尴尬......
在尝试(感觉到)每个可能的解决方案之后,我再次检查了IP,结果发现我复制了标记为 new Scope
{
Name = "read",
DisplayName = "Read data",
Type = ScopeType.Resource,
Emphasize = false,
ScopeSecrets = new List<Secret>
{
new Secret("secret".Sha256())
}
},
new Scope
{
Name = "write",
DisplayName = "Write data",
Type = ScopeType.Resource,
Emphasize = true,
ScopeSecrets = new List<Secret>
{
new Secret("secret".Sha256())
}
}
的那个,这显然不是正确标记为 ipconfig
!
所以,如果您遇到同样的问题,但仍然觉得自己已经完成了所有事情,请务必在放弃之前仔细检查IP!