2011-07-19 98 views
1

發送XML字符串到服務器我最近開始做Android的編程。我遇到了一個問題。目前我已經構建了一個名爲'sendData'的XML字符串請求。此sendData需要發送到服務器以驗證用戶帳戶是否有效。的Android,通過HTTP

目前,當我嘗試發送請求,我就與服務器聯繫,但我得到一個默認的通用響應誤差回這使我相信XML沒有被correcrtly發送。

public void postData(String sendData) { 
     // Create a new HttpClient and Post Header 
     System.out.println("SENDDATA" + sendData); 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpPost httppost = new HttpPost("http://www......"); 

     try { 
      // Add your data 
      List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(0); 
      nameValuePairs.add(new BasicNameValuePair(sendData, sendData)); 
      httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

      // Execute HTTP Post Request 
      HttpResponse response = httpclient.execute(httppost); 

      inputStreamToString(response.getEntity().getContent()); 

     } 
     catch (ClientProtocolException e) 
     { 
      // TODO Auto-generated catch block 
     } 
     catch (IOException e) 
     { 
      // TODO Auto-generated catch block 
     } 
    } 

以上是我用來發送數據的代碼。我相信問題可能發生在'嘗試'部分。我在這個論壇上搜索了類似的問題,並找不到我正在尋找的答案。

任何幫助將不勝感激。

感謝,

編輯:

在日誌貓。當我打印字符串時,它看起來像這樣。

07-19 15:35:36.642: INFO/System.out(2204): <Request xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="1.0" xsi:noNamespaceSchemaLocation="http://www.example.com"> 
07-19 15:35:36.642: INFO/System.out(2204): <Identification> 
07-19 15:35:36.642: INFO/System.out(2204): <UserID>[email protected]</UserID> 
07-19 15:35:36.642: INFO/System.out(2204): <Password>password</Password> 
07-19 15:35:36.642: INFO/System.out(2204): </Identification> 
07-19 15:35:36.642: INFO/System.out(2204): <Service> 
07-19 15:35:36.652: INFO/System.out(2204): <ServiceName>AccountVerify</ServiceName> 
07-19 15:35:36.652: INFO/System.out(2204): <ServiceDetail/> 
07-19 15:35:36.652: INFO/System.out(2204): </Service> 

07-19 15:35:36.652:INFO/System.out的(2204):

每個元素都有它在logcat的自己的行。這可能是問題嗎?

+1

1.)發佈您收到的錯誤消息。 2)把東西在catch塊 - 錯誤可能會被抓到,打空catch塊和深藏不露,然後該程序在一個糟糕的狀態仍在繼續。 – Nate

+0

您是否嘗試過使用TCPMon攔截並驗證來自應用的數據? – anirvan

+0

我沒有收到任何錯誤消息。我會在catch塊中加入一些東西。我從來沒有使用TCPMon,但我會研究它。 – Sad

回答

2

我有答案,但問題是,沒有信息在實際的要求在進一步尋找被髮送。解決的辦法是刪除陣列,並通過設置一個新的實體取代它。改變/工作代碼是b elow:

 try { 
      StringEntity se = new StringEntity(sendData); 
      httppost.setEntity(se); 
      // Execute HTTP Post Request 
      HttpResponse response = httpclient.execute(httppost); 
      System.out.println("Message Sent!"); 
      inputStreamToString(response.getEntity().getContent()); 
      } 
0

我強烈建議你使用Fiddler Web Debugger來幫助您檢測您發送的內容。這是一個很棒的工具,可以爲你節省很多時間。

有一對夫婦 錯誤 問題與已發佈的代碼中。

要創建ArrayList中的大小爲0,這將是更有效地設置爲1(因爲只是添加一個的NameValuePair

List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1); 

第一BasicNameValuePair構造函數的參數是錯誤的,應該是有的這種密鑰的名字

nameValuePairs.add(new BasicNameValuePair("mySendData", sendData)); 
+0

其實ArrayList <...>(0)是好的... http://stackoverflow.com/questions/4666024/what-is-the-difference-between-arraylist-al-new-arraylist-和ArrayList的,人...但你說得對BasicNameValuePair :) – Selvin

+0

我已經更新這反映您的評論。 – Merlin