android-使用ApacheHttpClient

android-使用ApacheHttpClient,android,Android,我正在尝试从android应用程序调用Tomcat中运行在本地的servlet。我不确定它是否到达servlet,因为我没有看到servlet的任何系统打印输出。当我点击浏览器上的url时,我看到了一些东西,但不是来自android应用程序 我的AndroidManifest.xml中有这个 <uses-permission android:name="android.permission.INTERNET"></uses-permission> 这是我的密码

我正在尝试从android应用程序调用Tomcat中运行在本地的servlet。我不确定它是否到达servlet,因为我没有看到servlet的任何系统打印输出。当我点击浏览器上的url时,我看到了一些东西,但不是来自android应用程序

我的AndroidManifest.xml中有这个

<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的基本信息。