2017-10-20 45 views
0

我想在我的android应用程序中实现VPOS。我有C#实现。我正在尝试根据Android进行更改。在C#代码中;如何在android中使用NameValuePair构造HTML?

NameValueCollection parameters = new NameValueCollection(); 
parameters.Add("mode", strmode); //just one of parameter. 
RedirectAndPOST(this, "url", parameters); 
public static void RedirectAndPOST(Page page, string destinationUrl, NameValueCollection data) 
    { 
     string strForm = PreparePOSTForm(destinationUrl, data); 

     page.Controls.Add(new LiteralControl(strForm)); 
    } 

    private static String PreparePOSTForm(string url, NameValueCollection data) 
    { 
     string formID = "PostForm"; 

     StringBuilder strForm = new StringBuilder(); 

     strForm.AppendFormat("<form id=\"{0}\" name=\"{0}\" action=\"{1}\" method=\"POST\">", formID, url); 

     foreach (string key in data) 
     { 

      strForm.AppendFormat("<input type=\"hidden\" name=\"{0}\" value=\"{1}\">", key, data[key]); 

     } 

     strForm.Append("</form>"); 

     StringBuilder strScript = new StringBuilder(); 

     strScript.Append("<script language=\"javascript\">"); 

     strScript.AppendFormat("document.{0}.submit();", formID); 

     strScript.Append("</script>"); 




     return strForm.ToString() + strScript.ToString(); 


    } 

在我的Java代码,首先,我创建NameValuePair,然后,我创建结构HTMLpreparePOSTMethod方法。之后,我发送HTTP POST Request

ArrayList<NameValuePair> parameter = new ArrayList<NameValuePair>(); 
parameter.add(new BasicNameValuePair("mode", strmode)); 
parameter.add(new BasicNameValuePair("cardnumber", cardNumber)); 
parameter.add(new BasicNameValuePair("cardexpiredatemonth", cardExpireDateMonth)); 
parameter.add(new BasicNameValuePair("cardexpiredateyear", cardExpireDateYear)); 
parameter.add(new BasicNameValuePair("cardcvv2", CardCvv2)); 
post = preparePOSTForm("url", parameter); 
private static String preparePOSTForm(String url, ArrayList<NameValuePair> data) 

    { 
     String formID = "PostForm"; 

     StringBuilder strForm = new StringBuilder(); 

     strForm.append(String.format("<form id=\"{0}\" name=\"{0}\" action=\"{1}\" method=\"POST\">", formID, url)); 

     for (int i=0; i<data.size(); i++) { 

      strForm.append(String.format("<input type=\"hidden\" name=\"{0}\" value=\"{1}\">", data.get(i).getName(), data.get(i).getValue())); 

     } 

     strForm.append("</form>"); 

     StringBuilder strScript = new StringBuilder(); 

     strScript.append("<script language=\"javascript\">"); 

     strScript.append(String.format("document.{0}.submit();", formID)); 

     strScript.append("</script>"); 

     param = strForm.toString() + strScript.toString(); 
     System.out.println("result: "+param); 
     return strForm.toString() + strScript.toString(); 
    } 

但是,我不能构建HTML。

Result: <form id="{0}" name="{0}" action="{1}" method="POST"><input type="hidden" name="{0}" value="{1}"><input type="hidden" name="{0}" value="{1}"><input type="hidden" name="{0}" value="{1}"><input type="hidden" name="{0}" value="{1}"><input type="hidden" name="{0}" value="{1}"><input type="hidden" name="{0}" value="{1}"></form><script language="javascript">document.{0}.submit();</script> 

如何使用名称 - 值对和StringBuilder或其他方法构造HTML

+0

'parameter.add(new BasicNameValuePair(“mode”,strmode));'请添加更多变量,不要使用变量作为strmode,因为我们不知道你在用什么。 – greenapps

+0

请格式化您的结果。不要将它张贴在一行上。你让我们滚动半个小时。 – greenapps

回答

1
strForm.append(String.format("<input type=\"hidden\" name=\"{0}\" value=\"{1}\">" 
     , data.get(i).getName(), data.get(i).getValue())); 

正如你看到的参数没有填写你只是得到该格式字符串不变。

使用%s代替{0}和{1}。

+0

感谢您的快速响应! – user8654574