Google Cloud Endpoint一直抛出“流意外结束”异常

7

有人知道为什么当我调用Google Cloud Endpoint时,会在我的应用程序引擎实例被实际访问之前就抛出"unexpected end of stream"异常吗?每次调用我的端点时,我都会收到以下错误。在大多数情况下,该错误出现在其他每个调用之后;在少数情况下,它是一致的。

05-06 18:32:28.335: W/System.err(11783): java.io.IOException: unexpected end of stream
05-06 18:32:28.343: W/System.err(11783):    at libcore.net.http.FixedLengthOutputStream.close(FixedLengthOutputStream.java:58)
05-06 18:32:28.343: W/System.err(11783):    at com.google.api.client.http.javanet.NetHttpRequest.execute(NetHttpRequest.java:82)
05-06 18:32:28.343: W/System.err(11783):    at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:980)
05-06 18:32:28.343: W/System.err(11783):    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:412)
05-06 18:32:28.343: W/System.err(11783):    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:345)
05-06 18:32:28.343: W/System.err(11783):    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:463)
…

05-06 18:32:28.343: W/System.err(11783):    at android.os.AsyncTask.finish(AsyncTask.java:631)
05-06 18:32:28.343: W/System.err(11783):    at android.os.AsyncTask.access$600(AsyncTask.java:177)
05-06 18:32:28.343: W/System.err(11783):    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
05-06 18:32:28.343: W/System.err(11783):    at android.os.Handler.dispatchMessage(Handler.java:99)
05-06 18:32:28.343: W/System.err(11783):    at android.os.Looper.loop(Looper.java:137)
05-06 18:32:28.343: W/System.err(11783):    at android.app.ActivityThread.main(ActivityThread.java:4849)
05-06 18:32:28.343: W/System.err(11783):    at java.lang.reflect.Method.invokeNative(Native Method)
05-06 18:32:28.343: W/System.err(11783):    at java.lang.reflect.Method.invoke(Method.java:511)
05-06 18:32:28.343: W/System.err(11783):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
05-06 18:32:28.343: W/System.err(11783):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
05-06 18:32:28.343: W/System.err(11783):    at dalvik.system.NativeStart.main(Native Method)

顺便说一下:我甚至在执行小操作(例如验证一个令牌,可能是一个20到50个字符的字符串)时也会遇到此错误。


你能提供你的终端点代码吗? - MikO
这个问题在GAE上有一个未解决的问题: https://code.google.com/p/googleappengine/issues/detail?id=9291 - Tom
以及一个开放的 Google Java API 客户端问题: https://code.google.com/p/google-http-java-client/issues/detail?id=230 - Tom
2个回答

1
我曾经遇到过同样的问题。问题在于,与端点的通信不能在UI/主线程上运行。最简单的方法是创建一个简单的ASyncTask,例如像这样:
private class InsertTask extends AsyncTask<Void, Void, Void> {
    Exception exceptionThrown = null;
    TargetEndpoint targetEndpoint;
    Target target;

    public InsertMessageTask(Activity activity, TargetEndpoint targetEndpoint, Target target) {
        this.messageEndpoint= messageEndpoint;
        this.target= target;
    }

    @Override
    protected Void doInBackground(Void... params) {
        try {
            targetEndpoint.insertTarget(target).execute();
        } catch (IOException e) {
            exceptionThrown = e;
        }

        return null;
    }

    protected void onPostExecute(Void arg) {
        TheActivity.this.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                if (exceptionThrown == null)
                    Toast.makeText(TheActivity.this, "Success!", Toast.LENGTH_LONG).show();
                else
                    Toast.makeText(TheActivity.this, "Error occured: '" + exceptionThrown.getMessage(), Toast.LENGTH_LONG).show();

            }
        });
    }
}

我同意错误信息可以更加具体,但它有其原因。您不希望在UI线程上运行时间昂贵的方法,因为这可能会降低其性能。

1
我也遇到了同样的问题,每隔一段时间就会出现“意外的流结束”IOE异常。正如你所说,在appengine中没有记录日志。我有一个包含多个端点的类,但只有其中一个发生这种情况。
这是Api方法的结构:
@ApiMethod(name = "blablabla", httpMethod = HttpMethod.POST)
public static ooooo createCDR(@Named("iiii") String iiii,
        @Named("uuuu") String uuuu, @Named("cccc") Long cccc,
        @Named("aaaa") int aaaa, User user)

你能否在App Engine应用程序中添加额外的日志记录以捕获错误并查看是否能够获得任何线索。请查看此Google文档以获取示例:App Engine中的日志记录 - tony m
Tony,正如Pouton在他的问题中提到,appengine实例甚至都没有被访问。这似乎是Android Endpoints实现中的问题。 - Miguel
@plsp 目前为止我还没有...这真的很令人沮丧。 - Miguel
我设置了连接关闭属性,到目前为止我还没有遇到这个错误。但是,我没有广泛的设备来测试。如果这对你有用,请告诉我。public Send send(com.google.api.services.devices.model.ServiceMessagesContentMessage content) throws java.io.IOException { Send result = new Send(content); result.getRequestHeaders().set("connection", "close"); initialize(result); return result; } - plspl
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接