2012-08-16 123 views
0

我正在開發一些應用程序,我想將它們連接到Restful WebService。要做到這一點,我寫了這個類:如何通過Android應用程序使用HttpClient訪問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方法工作正常,但我不能做我的web服務的職位。我的服務的接口是:

@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 - 不允許的方法------ -------------------------------------------------- ------------------------ type狀態報告消息方法不允許描述指定的HTTP方法不允許用於請求的資源(方法不允許)。

有人可以幫助我嗎?

真誠, 麗塔

回答

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"; 
+0

我在我的手機上運行。 。但是問題是當我試圖僅僅使用不在我的手機中的測試類來發布帖子時,系統給我這個消息: HTTP狀態405 - 方法不是A llowed ----------------------------------------------- --------------------------------- 類型狀態報告 消息方法不允許 說明指定的HTTP方法不允許用於請求的資源(方法不允許)。 – Rita 2012-08-16 14:23:51

相關問題