2012-02-28 81 views
0

我想在Android應用程序本地運行的Tomcat中調用一個servlet。我不確定它是否到達了servlet,因爲我沒有看到來自servlet的任何系統打印輸出。當我點擊瀏覽器上的網址時,我看到了一些東西,但不是來自android應用。android-使用apache HttpClient

我有這個在我的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(); 
+0

輸出response.getStatusLine()。getStatusCode()來logcat中,看到你的GOT,它會告訴你關於你的HttpResponse的基本信息。 – yorkw 2012-02-28 08:23:07

回答

1

你是在蜂窩,如果是這樣......你不能再這樣做在顯示線程,因此,隨後的問題是,你在顯示線程中運行呢?

另外...什麼System.out.println在Android中做?我以爲你必須把東西扔到日誌...還有一個System.out?!

否則,只是看着它,它看起來應該工作。

此外,爲什麼不讓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; 

} 
+0

我在android 2.2上運行它的目標。對於system.out,我忘了發表評論,因爲我將獨立的Java客戶端複製到android類。而且我在tomcat上看不到任何日誌。它看起來並不像它到達servlet。 – user826323 2012-02-28 06:26:01

+0

好,關鍵是找出爲什麼它沒有撥打電話。您是否嘗試過通過設備的webkit瀏覽器調用servlet? (或者您使用電腦瀏覽器進行測試?)。我會連接調試器,並在逐步嘗試訪問您的servlet時查看您的HttpClient告訴您的內容。 – 2012-02-28 07:09:37

+0

我在android上使用了瀏覽器。它可以到達servlet。 – user826323 2012-02-28 14:24:16