Reputation: 451
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
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
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