How to convert String to List (Android)?

I tried to use a Toast to display List<DataItem>.toString(), but the toast only shows [{name='phone',value='081345678912'}] , and does not show all the data that I want.

I want it to show this:

[{name='email',value='[email protected]'}, {name='userpwd',value='123456'}, {name='userid',value='Aku Ganteng'}, {name='phone',value='081345678912'}]

Toast List<DataItem> :

List<DataItem> dataItemList = new ArrayList<>();
DataItem dataItem = new DataItem();
dataItem.setName("email");
dataItem.setName("userpwd");
dataItem.setName("userid");
dataItem.setName("phone");
dataItem.setValue(getEmail);
dataItem.setValue(getPassword);
dataItem.setValue(getFullName);
dataItem.setValue(getPhoneNumber);
dataItemList.add(dataItem);

Toast.makeText(this, dataItemList.toString(), Toast.LENGTH_SHORT).show();

POJO DataItem :

public class DataItem{

    @SerializedName("name")
    private String name;

    @SerializedName("value")
    private String value;

    public void setName(String name){
        this.name = name;
    }

    public String getName(){
        return name;
    }

    public void setValue(String value){
        this.value = value;
    }

    public String getValue(){
        return value;
    }

    @Override
    public String toString(){
        return 
            "{" + 
            "name = '" + name + '\'' + 
            ",value = '" + value + '\'' + 
            "}";
    }
}

Upvotes: 0

Views: 182

Answers (2)

kabumere
kabumere

Reputation: 383

Your DataItem contains a single String name and a single String value. So when you use the same DataItem instance (DataItem dataItem = new DataItem();) all you're doing is overwriting name and value until the last combination are the only values left (phone and the phone number).

Since all these values belong in a single group, I'd recommend redesigning your class to be a more accurate model of your data. First, rename your DataItem class to be more descriptive (like User). Then, within that User class, create instance members and getters/setters for:

private String email;
private String userPassword; // I don't like this though, read below**
private String userId;
private String phoneNumber;

// add getters and setters here

Now you can set each of these properties directly on a single instance of User:

user.setEmail(someEmail);
user.setUserPassword(somePassword);
user.setUserId(someUserId);
user.setPhoneNumber(somePhoneNumber);

** I'd recommend you read up on better ways to store passwords in memory though. See this Stack Overflow question and its answers for more details.

Upvotes: 1

Ameya Pandilwar
Ameya Pandilwar

Reputation: 2778

The List that you have initialized contains only a single DataItem element whose values are being replaced. To achieve what you have described, you need a DataItem for each of the required data as follows --

List<DataItem> dataItemList = new ArrayList<>();

// email Data Item
DataItem emailDataItem = new DataItem();
emailDataItem.setName("email");
emailDataItem.setValue(getEmail);
dataItemList.add(emailDataItem);

// userpwd Data Item
DataItem userpwdDataItem = new DataItem();
userpwdDataItem.setName("userpwd");
userpwdDataItem.setValue(getPassword);
dataItemList.add(userpwdDataItem);

// userid Data Item
DataItem useridDataItem = new DataItem();
useridDataItem.setName("userid");
useridDataItem.setValue(getFullName);
dataItemList.add(useridDataItem);

// phone Data Item
DataItem phoneDataItem = new DataItem();
phoneDataItem.setName("phone");
phoneDataItem.setValue(getPhoneNumber);
dataItemList.add(phoneDataItem);

Toast.makeText(this, dataItemList.toString(), Toast.LENGTH_SHORT).show();

Upvotes: 2

Related Questions