在生产服务器中获取空通知

时间:2014-02-13 13:02:04

标签: java google-glass google-mirror-api

我使用mirror api开发了一个谷歌眼镜应用程序。在开发期间,我使用“Introspected tunnels to localhost”来接收通知。

现在我在生产服务器上上传了我的应用程序。现在我将我的回调网址配置为我的域名,例如 https://www.mydomain.com:8443/notify 。但我得到空的通知。

在notify servlet中:

BufferedReader notificationReader = new BufferedReader(
        new InputStreamReader(request.getInputStream()));
String notificationString = ""; 
int lines = 0;

while (notificationReader.ready()) {
    notificationString += notificationReader.readLine();
    lines++;

    if (lines > 1000) {
        throw new IOException(
                "Attempted to parse notification payload that was unexpectedly long.");
    }
}

LOG.info("\ngot raw notification : " + notificationString);

in catalina.out

Feb 13, 2014 12:51:48 PM com.google.glassware.NotifyServlet doPost
INFO: got raw notification : 

我该如何解决?

4 个答案:

答案 0 :(得分:1)

StringBuffer stringBuffer = new StringBuffer();
                String line = "";
                BufferedReader bufferReader = new BufferedReader(
                                       new InputStreamReader(request.getInputStream()));
                while ((line = bufferReader.readLine()) != null) {         
                    stringBuffer.append(line);
                }
                notificationString = stringBuffer.toString();

希望它能奏效。

答案 1 :(得分:0)

我认为您应该使用readLine()方法。stack overflow的答案之一建议不要使用ready()来满足此类要求。

  

ready方法告诉我们Stream是否准备好被读取。   想象一下,您的流正在从网络套接字读取数据。在这   情况下,流可能没有结束,因为套接字还没有   关闭,但它可能还没有为下一个数据块做好准备,因为   套接字的另一端没有再推送任何数据。

     

在上面的场景中,我们无法再读取远程数据   结束推送它,所以我们必须等待数据变得可用,或者   要关闭套接字。 ready()方法告诉我们数据的时间   是可用的。

答案 2 :(得分:0)

我遇到了同样的问题,我将代码更改为:

 StringBuffer jb = new StringBuffer();
 String notificationString = "";
 String line = "";
 BufferedReader reader = request.getReader();
 while ((line = reader.readLine()) != null) {         
     jb.append(line);
 }
 notificationString = jb.toString();

答案 3 :(得分:0)

试试这个:

while(notificationReader.ready()) {
    notificationString = notificationString.concat(notificationReader.readLine());
    lines++;
}