我正在为Google Glass开发,并且在将文件从Glass上传到我用来管理API调用的servlet应用程序时遇到了问题。我设置了一个客户端ID和密码,使用Developer's控制台验证来自servlet应用程序的api调用。我已经看到这些链接提到玻璃的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请求吗?我应该尝试验证我没有的地方吗?如果需要,我很乐意提供任何其他参考信息。我非常感谢任何指导和专业知识。谢谢。
答案 0 :(得分:0)
Glass支持HTTP调用 - 我不认为这是你的问题。
问题似乎更可能在于您的servlet或网络配置(或它们的某种组合)。
要检查的一些事项:
答案 1 :(得分:0)
我想出了我的问题,我意识到我可以提供更多信息。我很抱歉。无论如何,Jetty服务器只在localhost(127.0.0.1)上运行。为了解决这个问题,我编辑了我的maven项目的pom.xml文件,如下所示:
- 在配置标记下添加了appengine插件标记,地址标记为地址0.0.0.0,端口标记为端口8080.这允许它在localhost上运行。
- 当我尝试访问原始本地IP时,appengine发出400错误,所以我在我的机器上编辑了hosts文件,位于/ private / etc / hosts之类,并添加了这一行:
my-wlan-ip fakedomain.com
但我还必须将fakedomain.com:8080/oauth2callback添加到我在基于凭据的Google Developer's Console中注册的重定向uris。
让我从其他设备访问我的devserver。