如何将字符串转换为列表(Android)?

huangapple go评论93阅读模式
英文:

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.

我尝试使用 Toast 来显示 List<DataItem>.toString(),但 Toast 只显示了 [{name='phone',value='081345678912'}],并没有显示我想要的所有数据。

I want it to show this:

我希望它显示如下内容:

[{name='email',value='akuganteng@gmail.com'}, {name='userpwd',value='123456'}, {name='userid',value='Aku Ganteng'}, {name='phone',value='081345678912'}]

Toast List<DataItem> :

Toast List<DataItem>

  1. List<DataItem> dataItemList = new ArrayList<>();
  2. DataItem dataItem = new DataItem();
  3. dataItem.setName("email");
  4. dataItem.setValue(getEmail);
  5. dataItemList.add(dataItem);
  6. dataItem = new DataItem();
  7. dataItem.setName("userpwd");
  8. dataItem.setValue(getPassword);
  9. dataItemList.add(dataItem);
  10. dataItem = new DataItem();
  11. dataItem.setName("userid");
  12. dataItem.setValue(getFullName);
  13. dataItemList.add(dataItem);
  14. dataItem = new DataItem();
  15. dataItem.setName("phone");
  16. dataItem.setValue(getPhoneNumber);
  17. dataItemList.add(dataItem);
  18. Toast.makeText(this, dataItemList.toString(), Toast.LENGTH_SHORT).show();

POJO DataItem :

POJO DataItem:

  1. public class DataItem {
  2. @SerializedName("name")
  3. private String name;
  4. @SerializedName("value")
  5. private String value;
  6. public void setName(String name) {
  7. this.name = name;
  8. }
  9. public String getName() {
  10. return name;
  11. }
  12. public void setValue(String value) {
  13. this.value = value;
  14. }
  15. public String getValue() {
  16. return value;
  17. }
  18. @Override
  19. public String toString() {
  20. return "{" +
  21. "name = '" + name + '\'' +
  22. ",value = '" + value + '\'' +
  23. "}";
  24. }
  25. }

Please note that I've corrected the code for creating the dataItemList and setting the values for each DataItem object based on your desired output.

英文:

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='akuganteng@gmail.com'}, {name='userpwd',value='123456'}, {name='userid',value='Aku Ganteng'}, {name='phone',value='081345678912'}]

Toast List<DataItem> :

  1. List<DataItem> dataItemList = new ArrayList<>();
  2. DataItem dataItem = new DataItem();
  3. dataItem.setName("email");
  4. dataItem.setName("userpwd");
  5. dataItem.setName("userid");
  6. dataItem.setName("phone");
  7. dataItem.setValue(getEmail);
  8. dataItem.setValue(getPassword);
  9. dataItem.setValue(getFullName);
  10. dataItem.setValue(getPhoneNumber);
  11. dataItemList.add(dataItem);
  12. Toast.makeText(this, dataItemList.toString(), Toast.LENGTH_SHORT).show();

POJO DataItem :

  1. public class DataItem{
  2. @SerializedName("name")
  3. private String name;
  4. @SerializedName("value")
  5. private String value;
  6. public void setName(String name){
  7. this.name = name;
  8. }
  9. public String getName(){
  10. return name;
  11. }
  12. public void setValue(String value){
  13. this.value = value;
  14. }
  15. public String getValue(){
  16. return value;
  17. }
  18. @Override
  19. public String toString(){
  20. return
  21. "{" +
  22. "name = '" + name + '\'' +
  23. ",value = '" + value + '\'' +
  24. "}";
  25. }
  26. }

答案1

得分: 2

你初始化的List仅包含一个名为DataItem的元素,其值正在被替换。要实现你描述的功能,你需要为每个所需的数据创建一个DataItem,如下所示:

  1. List<DataItem> dataItemList = new ArrayList<>();
  2. // 邮箱数据项
  3. DataItem emailDataItem = new DataItem();
  4. emailDataItem.setName("email");
  5. emailDataItem.setValue(getEmail);
  6. dataItemList.add(emailDataItem);
  7. // 用户密码数据项
  8. DataItem userpwdDataItem = new DataItem();
  9. userpwdDataItem.setName("userpwd");
  10. userpwdDataItem.setValue(getPassword);
  11. dataItemList.add(userpwdDataItem);
  12. // 用户ID数据项
  13. DataItem useridDataItem = new DataItem();
  14. useridDataItem.setName("userid");
  15. useridDataItem.setValue(getFullName);
  16. dataItemList.add(useridDataItem);
  17. // 电话数据项
  18. DataItem phoneDataItem = new DataItem();
  19. phoneDataItem.setName("phone");
  20. phoneDataItem.setValue(getPhoneNumber);
  21. dataItemList.add(phoneDataItem);
  22. Toast.makeText(this, dataItemList.toString(), Toast.LENGTH_SHORT).show();
英文:

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

  1. List&lt;DataItem&gt; dataItemList = new ArrayList&lt;&gt;();
  2. // email Data Item
  3. DataItem emailDataItem = new DataItem();
  4. emailDataItem.setName(&quot;email&quot;);
  5. emailDataItem.setValue(getEmail);
  6. dataItemList.add(emailDataItem);
  7. // userpwd Data Item
  8. DataItem userpwdDataItem = new DataItem();
  9. userpwdDataItem.setName(&quot;userpwd&quot;);
  10. userpwdDataItem.setValue(getPassword);
  11. dataItemList.add(userpwdDataItem);
  12. // userid Data Item
  13. DataItem useridDataItem = new DataItem();
  14. useridDataItem.setName(&quot;userid&quot;);
  15. useridDataItem.setValue(getFullName);
  16. dataItemList.add(useridDataItem);
  17. // phone Data Item
  18. DataItem phoneDataItem = new DataItem();
  19. phoneDataItem.setName(&quot;phone&quot;);
  20. phoneDataItem.setValue(getPhoneNumber);
  21. dataItemList.add(phoneDataItem);
  22. Toast.makeText(this, dataItemList.toString(), Toast.LENGTH_SHORT).show();

答案2

得分: 1

您的DataItem包含一个字符串name和一个字符串value。因此,当您使用相同的DataItem实例(DataItem dataItem = new DataItem();)时,您只是不断地覆盖namevalue,直到最后一组是唯一剩下的值(phone和电话号码)。

由于所有这些值都属于同一组,我建议重新设计您的类以更准确地模拟您的数据。首先,将DataItem类重命名为更具描述性的名称(比如User)。然后,在User类内部,创建实例成员和getter/setter方法:

  1. private String email;
  2. private String userPassword; // 不过,我不太喜欢这个名字,后面会解释**
  3. private String userId;
  4. private String phoneNumber;
  5. // 在这里添加getter和setter方法

现在,您可以直接在单个User实例上设置每个属性:

  1. user.setEmail(someEmail);
  2. user.setUserPassword(somePassword);
  3. user.setUserId(someUserId);
  4. user.setPhoneNumber(somePhoneNumber);

**我建议您详细了解更好的将密码存储在内存中的方法。请参阅此Stack Overflow问题及其答案以获取更多详细信息。

英文:

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:

  1. private String email;
  2. private String userPassword; // I don&#39;t like this though, read below**
  3. private String userId;
  4. private String phoneNumber;
  5. // add getters and setters here

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

  1. user.setEmail(someEmail);
  2. user.setUserPassword(somePassword);
  3. user.setUserId(someUserId);
  4. 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.

huangapple
  • 本文由 发表于 2020年8月8日 13:24:50
  • 转载请务必保留本文链接:https://go.coder-hub.com/63312129.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定