简体   繁体   中英

Java ArrayList into Name value pair

In a java class, am using an arraylist say reports containing list of all the reports which have reportid, reportname, reporttype etc which i want to add into NameValuePair and send a Http postmethod call to a particular url.

I want to add the arraylists - reportname into name value pair(org.apache.commons.httpclient.NameValuePair) and then use the http client post method to submit the name value pair data to a particular url.

Here is my name value pair

if (validateRequest()) {
        NameValuePair[] data = {
            new NameValuePair("first_name", firstName),
            new NameValuePair("last_name", lastName),
            new NameValuePair("email", mvrUser.getEmail()),
            new NameValuePair("organization", mvrUser.getOrganization()),
            new NameValuePair("phone", mvrUser.getPhone()),
            new NameValuePair("website", mvrUser.getWebsite()),
            new NameValuePair("city", mvrUser.getCity()),
            new NameValuePair("state", mvrUser.getState()),
            new NameValuePair("country", mvrUser.getCountry()),
            new NameValuePair(**"report(s)", reports**.)
        };

please suggest me how to add the reports arraylist reportname into reports field of NameValuePair.

-- thanks

@ adarsh can I use with generics something like this?

reportname = "";
for (GSReport report : reports) {
        reportname = reportname + report.getReportName();
        reportname += ",";
    }

and then add in namevalue pair as

new NameValuePair("report(s)", reportname)

for name value pair use map like things... eg. Hastable(it is synchronized) , u can use other implementation of Map which are not synchronized.

I suggest to serialize your reports ArrayList into a JSON formatted String .

new NameValuePair("reports", reportsAsJson)

You can build your reportsAsJson variable using any of the JSON serialization libraries (like the one at http://json.org/java/ ). It will have approximatively this format :

reportsAsJson = "[{reportid:'1',reportname:'First Report',reporttype:'Type 1'}, {reportid:'2',reportname:'Seond Report',reporttype:'Type 2'}]";

Well, you cannot do that. NameValuePair takes in String arguments in the constructor. It makes sense as it is used for HTTP POST.

What you can do is come up with a way to serialize the Report object into String and send this string as a string parameter. One way of doing this maybe is to delimit the parameters of the Report class.

reports=reportName1|reportName2|reportName3

Assuming reports is your ArrayList ,

String reportsStr = "";

for(int i = 0; i < reports.size(); i++) {
    reportStr += reportName;
    if(i != reports.size() - 1) {
        reportsStr += "|";
    }
}

NameValuePair nvPair = new NameValuePair("reports", reportsStr);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM