android-使用ApacheHttpClient
我正在尝试从android应用程序调用Tomcat中运行在本地的servlet。我不确定它是否到达servlet,因为我没有看到servlet的任何系统打印输出。当我点击浏览器上的url时,我看到了一些东西,但不是来自android应用程序 我的AndroidManifest.xml中有这个android-使用ApacheHttpClient,android,Android,我正在尝试从android应用程序调用Tomcat中运行在本地的servlet。我不确定它是否到达servlet,因为我没有看到servlet的任何系统打印输出。当我点击浏览器上的url时,我看到了一些东西,但不是来自android应用程序 我的AndroidManifest.xml中有这个 <uses-permission android:name="android.permission.INTERNET"></uses-permission> 这是我的密码
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
这是我的密码
HttpClient client = new DefaultHttpClient();
HttpPost method = new HttpPost("http://192.168.1.6:8080/sampleweb/request");
List<BasicNameValuePair> nameValuePairs = new ArrayList<BasicNameValuePair>();
nameValuePairs.add(new BasicNameValuePair("req", xml));
method.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = (BasicHttpResponse) client.execute(method);
InputStream ips = response.getEntity().getContent();
BufferedReader buf = new BufferedReader(new InputStreamReader(ips, "UTF-8"));
if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
throw new Exception(response.getStatusLine().getReasonPhrase());
}
StringBuilder sb = new StringBuilder();
String s;
while (true) {
s = buf.readLine();
if (s == null || s.length() == 0)
break;
sb.append(s);
}
buf.close();
ips.close();
System.out.println("response="+sb.toString());
client.getConnectionManager().shutdown();
HttpClient=newdefaulthttpclient();
HttpPost方法=新的HttpPost(“http://192.168.1.6:8080/sampleweb/request");
List nameValuePairs=新的ArrayList();
添加(新的BasicNameValuePair(“req”,xml));
setEntity(新的UrlEncodedFormEntity(nameValuePairs));
HttpResponse响应=(BasicHttpResponse)client.execute(方法);
InputStream ips=response.getEntity().getContent();
BufferedReader buf=新的BufferedReader(新的InputStreamReader(ips,“UTF-8”);
if(response.getStatusLine().getStatusCode()!=HttpStatus.SC\u OK){
抛出新异常(response.getStatusLine().getReasonPhrase());
}
StringBuilder sb=新的StringBuilder();
字符串s;
while(true){
s=buf.readLine();
如果(s==null | | s.length()==0)
打破
某人追加;
}
buf.close();
ips.close();
System.out.println(“response=“+sb.toString());
client.getConnectionManager().shutdown();
你在蜂巢里吗,如果是的话。。。您不能再在显示线程中执行此操作,因此,接下来的问题是,您是否在显示线程中运行此操作
还有。。。System.out.println在Android中做什么??我以为你得把东西扔到木头上。。。还有系统吗?出去
否则,只要看一眼,它看起来应该会工作
另外,为什么不让servlet将一些东西打印到服务器日志中,这样您就可以更好地了解故障可能在哪里
[编辑]
试试这个
public String makeCall(){
HttpClient client = new HttpClient();
PostMethod filePost = new PostMethod(URL_PATH);
client.setConnectionTimeout(timeout);
String ret = "";
try{
if(nvpArray != null)
filePost.setRequestBody(nvpArray);
}catch(Exception e){
Log.d(TAG, "upload failed: " + e.toString());
}
try{
responseCode = client.executeMethod(filePost);
Log.d(TAG,"statusCode>>>" + responseCode);
//Log.d(TAG,"statusLine>>>" + filePost.getResponseBodyAsString());
ret = filePost.getResponseBodyAsString();
}catch(HttpException e){
Log.d(TAG, e.toString());
return "YSERROR:" + e.toString();
}catch(IOException e){
Log.d(TAG, e.toString());
return "YSERROR:" + e.toString();
}
catch(Exception e){
Log.d(TAG, e.toString());
return "YSERROR:" + e.toString();
};
filePost.releaseConnection();
return ret;
}
我在android 2.2上为target运行它。对于system.out,我忘了注释它,因为我将独立java客户端复制到android类。我在tomcat上没有看到任何日志。看起来它并没有到达servlet。好吧,关键是找出它为什么不进行调用。您是否尝试过通过设备的webkit浏览器调用servlet?(或者您正在使用计算机浏览器进行测试?)。我将附加调试器,并在您逐步尝试访问servlet时查看您的HttpClient会告诉您什么。它可以到达servlet。我得到http://:8080/的“连接被拒绝”。我已经设置了“android.permission.INTERNET”。我还需要设置其他设置或权限吗?没有。。。这很奇怪,如果您确定主机设置正确,那么唯一剩下的事情就是找出您的头文件包含的内容,因为它们一定缺少servlet希望看到的内容,并且拒绝了未经设置的连接(因为servlet正在接受来自平板电脑浏览器的连接).Output response.getStatusLine().getStatusCode()到Logcat,看看你得到了什么,它告诉你关于你的httpResponse的基本信息。