代码之家  ›  专栏  ›  技术社区  ›  cheft

可以从Glass发送HTTP请求吗?

  •  1
  • cheft  · 技术社区  · 11 年前

    我正在为GoogleGlass开发,一直在将文件从Glass上传到我用来管理API调用的servlet应用程序时遇到问题。我使用开发人员控制台设置了一个客户端ID和密码,以验证servlet应用程序的api调用。我看到这些链接提到了来自glass的http请求:
    HTTP Requests in Glass GDK 1
    Google Glass upload files using http-client
    ……但他们并没有提供令人难以置信的帮助。 我确实在清单文件中设置了Internet权限。这是我的代码:

    public class MyAsyncTask extends AsyncTask<Void, Void, Void> {
      private static final String TAG = "MyAsyncTask";
      private static String FILE_PATH;
      private String fileType;
      private static final String HOST_URL="http://10.0.2.2:8080/main";
      private static java.io.File fileToUpload;
    
    public MyAsyncTask(String filePath){
        FILE_PATH=filePath;
        fileToUpload=new java.io.File(FILE_PATH);
        Log.d(TAG,FILE_PATH);
        fileType=FILE_PATH.substring(FILE_PATH.indexOf("."));
    }
    @Override
    protected Void doInBackground(Void... params) {
        post();
        return null;
    }
    
    private int post() {
    
        int resultCode = 0;
    
        String url = HOST_URL;
    
        HttpClient client = new DefaultHttpClient();
        HttpPost post = new HttpPost(url);
    
    
        List<NameValuePair> urlParameters = new ArrayList<NameValuePair>();
        urlParameters.add(new BasicNameValuePair("source", "glass"));
    
        try {
            post.setEntity(new UrlEncodedFormEntity(urlParameters));
    
            HttpResponse response = client.execute(post);
            System.out.println("\nSending 'POST' request to URL : " + url);
            System.out.println("Post parameters : " + post.getEntity());
            System.out.println("Response Code : " +
                    response.getStatusLine().getStatusCode());
    
            resultCode = response.getStatusLine().getStatusCode();
    
            BufferedReader rd = new BufferedReader(
                    new InputStreamReader(response.getEntity().getContent()));
    
            StringBuffer result = new StringBuffer();
            String line = "";
            while ((line = rd.readLine()) != null) {
                result.append(line);
            }
    
            System.out.println(result.toString());
        } catch (Exception e) {
            Log.e("POST", e.getMessage());
        }
    
        return resultCode;
    }
    

    调用MyAsyncTask(filePath).execute()的结果;连接被拒绝。我将URL设置为它是什么,因为我读到localhost可能像运行Android模拟器时那样引用Glass设备,但servlet运行在 http://localhost:8080 .

    作为参考,我使用Jetty 6.1.x作为servlet。

    我的问题可能是什么?Glass不支持激发HTTP请求吗?我应该尝试验证我没有的地方吗?如果需要,我很乐意提供任何其他参考信息。我非常感谢任何指导和专业知识。非常感谢。

    2 回复  |  直到 9 年前
        1
  •  0
  •   Community Mohan Dere    9 年前

    Glass支持HTTP调用-我不认为这是你的问题。

    问题似乎更可能在于servlet或网络配置(或它们的某种组合)。

    需要检查的一些事项:

    • 确保您的Glass已连接到您的本地网络,并且您的服务器所连接的本地网络相同。服务器的10.x.x.x地址表示它位于专用网络上,您需要确保Glass位于同一专用网络上。
      • 您可以通过转到Glass上的设置屏幕来检查并确认它连接到了哪个wifi网络。确保上面写着“Wi-Fi”。轻点屏幕,它会告诉你连接的是什么wifi网络。
      • 要进行验证,您可能需要获取设备的IP地址。看见 this answer 获取一些可能有助于您执行此操作的代码。
    • 确保您可以按照您提供的地址到达服务器。如果可以,请在另一台计算机上(同一网络上)使用浏览器。确保您使用Glass应用程序将使用的确切URL- http://10.0.2.2:8080/main
      • 使用IP地址而不是“localhost”很重要。
      • 从同一台计算机与同一网络上的另一台计算机进行测试可能会指向该计算机上的防火墙是否阻止端口。
    • 确认servlet正在侦听的端口。
      • 您不会谈论您使用的是什么servlet引擎,因此很难准确指出您应该检查哪个文件的配置。如果你让我们知道,如果你不知道,我们可能会给你指明正确的方向。
      • Glass上的URL指向8080,因此确保您的servlet也设置为使用该端口。
    • 检查servlet日志,特别是访问日志,看看Glass设备和上面的手动测试是否真的连接到了它,或者是否有任何东西可以连接到它。
        2
  •  0
  •   cheft    11 年前

    我发现了我的问题,我意识到我本可以提供更多信息。我很抱歉。无论如何,Jetty服务器只在本地主机(127.0.0.1)上运行。为了解决这个问题,我编辑了maven项目的pom.xml文件,如下所示:

    -在配置标签下的appengine插件标签中添加了地址为0.0.0.0的地址标签和端口为8080的端口标签。这允许它在本地主机上运行。
    -然后,当我试图访问原始本地ip时,appengine给出了一个400错误,所以我在我的机器上编辑了hosts文件,该文件位于/private/etc/hosts,并添加了以下行:

    我的wlan ip fakdomain.com

    但我还必须将fakdomain.com:8080/oauth2callback添加到我在Google开发者控制台凭据下注册的重定向uri中。

    这让我可以从其他设备访问我的devserver。