【发布时间】:2015-03-21 16:23:07
【问题描述】:
我正在为 Google Glass 开发,并且在将文件从 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 可能指的是 Glass 设备,就像它在运行 Android 模拟器时所做的那样,但 servlet 在http://localhost:8080 上运行。
作为参考,我将 Jetty 6.1.x 用于我的 servlet。
我的问题可能是什么? Glass 不支持触发 HTTP 请求吗?我应该尝试在我没有的地方进行身份验证吗?如果需要,我很乐意提供任何其他参考信息。我非常感谢任何指导和专业知识。谢谢。
【问题讨论】:
-
谷歌眼镜就像一个普通的安卓设备。所以http请求的行为是一样的。在本地网络中工作与 Google 无关,而与任何设备有关。您应该寻找如何从 Android 设备访问本地网络。你会找到你的答案
-
@SimonMarquis。我对此进行了广泛的研究。我知道正在运行的设备的本地主机就是设备本身。我尝试了网络IP地址,但仍然出现连接被拒绝异常
-
您是否尝试使用运行服务器的机器的私有本地 IP 地址?编辑:例如看看这个:stackoverflow.com/questions/19132059/…
-
我在 Mac 上工作,我使用 ifconfig 获取此地址并使用它。它仍然给了我一个连接被拒绝的消息。但是,我没有更改提到的 httpd.conf 文件
-
如果你不这样做,服务器将拒绝该设备。
标签: java android http servlets google-glass