2013-02-28 781 views
0

我想發送數組的布爾值到servlet。 這是我迄今所做的,我如此堅持:如何使用NameValuePair向servlet發送數組值?

HttpClient client = new DefaultHttpClient(); 
    String postURL = "http://APP_NAME.appspot.com/listenforrestclient"; 
    HttpPost post = new HttpPost(postURL); 
     List<NameValuePair> params = new ArrayList<NameValuePair>(); 

     for (int i=0; i<arrBool.length; i++) { 
     arrBool[i] = r.nextBoolean(); 
     String[] user = {"","","","","",""}; 
     if (arrBool[i] == true) { 
      params.add(new BasicNameValuePair("user[i]", arrBool.toString())); 
     } 
     else if (arrBool[i] == false) { 
      params.add(new BasicNameValuePair("user[i]", arrBool.toString())); 
    } 
     } 
     UrlEncodedFormEntity ent = new UrlEncodedFormEntity(params,HTTP.UTF_8); 
     post.setEntity(ent); 
     HttpResponse responsePOST = client.execute(post); 
     HttpEntity resEntity = responsePOST.getEntity(); 
     if (resEntity != null) {  
      System.out.printf("RESPONSE: ", EntityUtils.toString(resEntity)); 
     } 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

我試圖做的只是用戶的[I], 「用戶[I]」,用戶。仍然無法找到它。

和servlet的,我有:

public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException 
{ 
    resp.setContentType("text/plain"); 

    for (int i=0; i<mmaa.length; i++) { 
     mmaa = req.getParameterValues("user"); 
     resp.getWriter().println(mmaa[i]); 
    } 

}

我在網上搜了很多,找不到什麼合適的。如果有人能幫助我,我會很感激。

感謝

+0

你可以發佈BasicNameValuePair()類或構造函數嗎?你已經聲明瞭'List params = new ArrayList ();'但是你在params中添加BasicNameValuePair的對象是BasicNameValuePair的NameValuePair的超類嗎? – Lakshmi 2013-02-28 06:25:13

+0

我能夠發佈BasicNameValuePair(「用戶」,「可用」),但這只是一個值「可用」字符串「用戶」。我想發送像一個用戶數組。 BasicNameValuePair是一個類,它是基於Apache HTTP客戶端的NameValuePair的基本實現。 – Mac 2013-02-28 06:29:17

+0

BasicNameValuePair的構造函數看起來像什麼? – Lakshmi 2013-02-28 06:31:48

回答

2

你有params.add(new BasicNameValuePair("user[i]", arrBool.toString()));

但你的鑰匙是串"user[i]"。改爲使用String.format("user[%d]", i)。 因此,改變

params.add(new BasicNameValuePair("user[i]", arrBool.toString())); 

params.add(new BasicNameValuePair(String.format("user[%d]", i), arrBool.toString())); 

在servlet中,你做得到的參數值:

for(int i = 0; i < ...){ 
    String value = request.getParameter(String.format("user[%d]", i); 
    //process value 
} 
+0

謝謝你的迴應。但是我應該在哪裏使用String.format(「user [%d]」,i)?另外我不明白如何將這些值發佈到servlet,所以我做了這個循環。應該用什麼樣的循環來代替。我再次感謝你的回覆。 – Mac 2013-02-28 06:16:29

+0

和mmaa是空的字符串數組,我用作String [] mmaa = {「」,「」,「」,「」,「」,「」}; – Mac 2013-02-28 06:19:09

+0

循環沒關係。您只需要與用於「BasicNameValuePair」的名稱以及用於檢索請求中參數的名稱一致。見編輯 – zz3599 2013-02-28 06:36:02

1

你是不是該嘗試做加入params.add(new BasicNameValuePair("user[i]", arrBool.toString()));新對象

params.add(new BasicNameValuePair(user[i].toString(), arrBool.toString())); 

在servlet中,首先需要從請求參數中獲取數組列表,併爲數組列表中的每個值創建一個具有相同BeanNameValuePair的對象,並使用getValue()檢查它的值。檢查是否正確獲取servlet中的值首先檢查是否通過調試正確獲取ArrayList。

+0

謝謝,但它仍然沒有在servlet上顯示任何內容。我認爲它會工作 – Mac 2013-02-28 06:52:16

+0

嘿我已編輯我的答案檢查你的回顧,並首先看看你是否得到ArrayList – Lakshmi 2013-02-28 07:04:03

+0

檢查這是對你的幫助http://stackoverflow.com/questions/4792356/can-anyone-explain- me-this-code – Lakshmi 2013-02-28 07:28:19