如何通过Android应用程序使用HttpClient访问Web服务?

时间:2012-08-16 13:43:14

标签: android web-services rest httpclient webservices-client

我正在开发一些应用程序,我想将它们连接到Restful WebService。为此,我写了这堂课:

public class WebServiceClient {
    public void postService() {
        HttpClient client = new DefaultHttpClient();
        String param1 = "ola\n5\nwww.youtube.com\n1000-01-01_00:00:00.0\n1223";
        String url = "http://localhost:8080/pt.Android.Project.WebService/rest/project";
        HttpPost post = new HttpPost(url);
        try {
            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
            nameValuePairs.add(new BasicNameValuePair("param1", param1));
            post.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            HttpResponse response = client.execute(post);
            BufferedReader rd = new BufferedReader(new InputStreamReader(
                    response.getEntity().getContent()));
            String line = "";
            while ((line = rd.readLine()) != null) {
                System.out.println(line);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void getService() {
        try {
            HttpClient client = new DefaultHttpClient();
            HttpGet request = new HttpGet(
                    "http://localhost:8080/pt.Android.Project.WebService/rest/project?id=3");

            HttpResponse response = client.execute(request);

            // Get the response
            BufferedReader rd = new BufferedReader(new InputStreamReader(
                    response.getEntity().getContent()));

            String line = "";

            while ((line = rd.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

getService方法工作正常但我不能发帖到我的webservice。我的服务界面是:

@Path("/project")
public WebService {
    TagAccessController ctrl;

    public ProjectWebService() {
        ctrl = new TagAccessController();
    }

    @GET
    @Produces(MediaType.TEXT_HTML)
    public String getTag(@QueryParam("id") String id) {
//      int id = 1;
        String result = ctrl.getTagContent(id);

        if (result != null) {
            String[] info = result.split("\\|");
            // String [] info = { "funciona","hoje"};

            return "<html> " + "<title>" + "Informação" + "</title>"
                    + "<body><h1>" + info[1] + "</h1>" + "<p>" + info[0]
                    + "</p>" + "<p>" + " Site: " + info[2] + "</p>" + "</body>"
                    + "</html> ";
        } else {
            return "<html> " + "<title>" + "Informação" + "</title>"
                    + "<body><h1>" + "Sem dados a apresentar!" + "</body></h1>"
                    + "</html> ";
        }
    }

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String getTagText(@QueryParam("id") String id) {
        //int id = 1;
        return ctrl.getTagContent(id);
    }

    @POST
    @Path("/create/{param1}")
    @Produces(MediaType.TEXT_PLAIN)
    public void putTag(@PathParam("param1") String param1{

        //System.out.println(param1);
        ctrl.saveTag(param1);
    }
}

问题是当我尝试仅使用测试类发布帖子时,系统会给我这样的消息:HTTP状态405 - 不允许的方法----------------- -------------------------------------------------- -------------类型状态报告消息方法不允许描述所请求资源不允许使用指定的HTTP方法(方法不允许)。

有人可以帮我这个吗?

此致 丽塔

1 个答案:

答案 0 :(得分:0)

如果您在模拟器上运行它,请不要使用localhost:

String url = "http://localhost:8080/pt.Android.Project.WebService/rest/project";

而是尝试:

String url = "http://10.0.2.2/pt.Android.Project.WebService/rest/project";