如何从对象Getter中Toast JSON数组的user_review_ids值?
解决Toast显示数组引用而非实际元素的问题
这个问题我太熟悉了!你看到的[Ljava.lang.String.;@41c19f...其实是数组默认调用toString()方法的输出——它只会告诉你这是一个数组对象,不会把里面的具体元素展示出来,和你用copyOf、clone()复制数组没关系,因为这些操作只是复制了数组本身,并没有改变它的字符串表现形式。
给你几个简单有效的解决方案:
1. 用Arrays.toString()快速格式化(推荐)
这是最省事的方法,Java的java.util.Arrays类提供了专门的toString方法来处理数组,能直接把数组转换成[元素1, 元素2, 元素3]格式的字符串。
示例代码:
// 先导入java.util.Arrays包 import java.util.Arrays; // 假设你已经从JSON里解析出了user_review_ids数组 int[] userReviewIds = yourJsonObject.getIntArray("user_review_ids"); // 或者如果是String数组的话:String[] userReviewIds = yourJsonObject.getStringArray("user_review_ids"); String displayText = Arrays.toString(userReviewIds); Toast.makeText(getApplicationContext(), displayText, Toast.LENGTH_SHORT).show();
2. 手动拼接自定义格式的字符串
如果想要更个性化的展示(比如去掉方括号、用顿号分隔元素),可以用StringBuilder或者StringJoiner来手动拼接:
用StringBuilder(兼容所有Android版本)
StringBuilder sb = new StringBuilder(); for (int i = 0; i < userReviewIds.length; i++) { sb.append(userReviewIds[i]); // 不是最后一个元素的话加分隔符 if (i != userReviewIds.length - 1) { sb.append("、"); // 这里可以换成你想要的分隔符,比如", " } } Toast.makeText(getApplicationContext(), sb.toString(), Toast.LENGTH_SHORT).show();
用StringJoiner(Android API 26+可用)
StringJoiner joiner = new StringJoiner(", ", "", ""); for (int id : userReviewIds) { joiner.add(String.valueOf(id)); } Toast.makeText(getApplicationContext(), joiner.toString(), Toast.LENGTH_SHORT).show();
为什么copyOf、clone()没用?
因为这些方法只是创建了一个新的数组对象,本质上还是数组类型,直接传递给Toast的话,还是会调用数组默认的toString()方法,自然还是显示那个看不懂的引用字符串。核心问题是要把数组转换成可读的字符串,而不是复制数组本身。
内容的提问来源于stack exchange,提问作者CHarris
相关产品推荐
相关产品推荐

