Basit
Basit

Reputation: 8626

How to convert String representation of ArrayList to ArrayList

I have an ArrayList, Whom i convert to String like

ArrayList str = (ArrayList) retrieveList.get(1);
...

makeCookie("userCredentialsCookie", str.toString(), httpServletResponce);
....

private void makeCookie(String name, String value, HttpServletResponse response) {

    Cookie cookie = new Cookie(name, value);
    cookie.setPath("/");
    response.addCookie(cookie);

} //end of makeCookie()

Now when i retrieve cookie value, i get String, but i again want to convert it into ArrayList like

private void addCookieValueToSession(HttpSession session, Cookie cookie, String attributeName) {       
    if (attributeName.equalsIgnoreCase("getusercredentials")) {

        String value = cookie.getValue();
        ArrayList userCredntialsList = (ArrayList)value;  //Need String to ArrayList 
        session.setAttribute(attributeName, userCredntialsList);
        return;
    }

    String value = cookie.getValue();
    session.setAttribute(attributeName, value);

} //end of addCookieValueToSession

How can i again convert it to ArrayList? Thank you.

Upvotes: 0

Views: 3561

Answers (3)

Grundlefleck
Grundlefleck

Reputation: 129367

As long as it's an ArrayList of String objects you should be able to write a small method which can parse the single String to re-create the list. The toString of an ArrayList will look something like this:

"[foo, bar, baz]"

So if that String is in the variable value, you could do something like this:

String debracketed = value.replace("[", "").replace("]", ""); // now be "foo, bar, baz"
String trimmed = debracketed.replaceAll("\\s+", ""); // now is "foo,bar,baz"
ArrayList<String> list = new ArrayList<String>(Arrays.asList(trimmed.split(","))); // now have an ArrayList containing "foo", "bar" and "baz"

Note, this is untested code.

Also, if it is not the case that your original ArrayList is a list of Strings, and is instead say, an ArrayList<MyDomainObject>, this approach will not work. For that your should instead find how to serialise/deserialise your objects correctly - toString is generally not a valid approach for this. It would be worth updating the question if that is the case.

Upvotes: 3

Marcelo
Marcelo

Reputation: 4608

someList.toString() is not a proper way of serializing your data and will get you into trouble.

Since you need to store it as a String in a cookie, use JSON or XML. google-gson might be a good lib for you:

ArrayList str = (ArrayList) retrieveList.get(1);
String content = new Gson().toJson(str);
makeCookie("userCredentialsCookie", content, httpServletResponce);
//...
ArrayList userCredntialsList = new Gson().fromJson(cookie.getValue(), ArrayList.class);

Upvotes: 3

Ravinder Reddy
Ravinder Reddy

Reputation: 24012

You can't directly cast a String to ArrayList instead you need to create an ArrayList object to hold String values.

You need to change part of your code below:

ArrayList userCredntialsList = (ArrayList)value;  //Need String to ArrayList 
session.setAttribute(attributeName, userCredntialsList);

to:

ArrayList<String> userCredentialsList = ( ArrayList<Strnig> ) session.getAttribute( attributeName );
if ( userCredentialsList == null ) {
    userCredentialsList = new ArrayList<String>( 10 );
    session.setAttribute(attributeName, userCredentialsList);
}

userCredentialsList.add( value );

Upvotes: 0

Related Questions