Sangram Anand
Sangram Anand

Reputation: 10854

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)

Upvotes: 0

Views: 19732

Answers (3)

Hamdi Douss
Hamdi Douss

Reputation: 1113

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'}]";

Upvotes: 1

adarshr
adarshr

Reputation: 62583

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);

Upvotes: 0

Jitendra kumar jha
Jitendra kumar jha

Reputation: 243

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

Upvotes: 1

Related Questions