当我尝试将值打印到文本字段时,它们显示为[Ljava.lang.String; @ 405af10
try {
JSONObject jObject = new JSONObject(byteArrayOutputStream.toString());
JSONArray Monday = jObject.getJSONArray("Monday");
String time = "";
String module = "";
String lecturer = "";
listAdapter = new ArrayAdapter<String[]>(this, R.layout.simplerow);
for (int i = 0; i < Monday.length(); i++)
{
time = Monday.getJSONObject(i).getString("time");
module = Monday.getJSONObject(i).getString("module");
lecturer = Monday.getJSONObject(i).getString("lecturer");
listAdapter.add(new String[] {time, module, lecturer});
}
mainListView.setAdapter(listAdapter);
} catch (Exception e) {
e.printStackTrace();
}
在simplerow xml文件中我有
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/rowTextView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:textSize="16sp" >
</TextView>
因此,每次打印时间,模块或讲师时,都应该在自己的文本视图框中。但它不起作用,我不知道为什么或如何解决它。
答案 0 :(得分:2)
很可能是因为ArrayAdapter
设置为在String
数组(String []
)中接受。
listAdapter = new ArrayAdapter<String[]>(this, R.layout.simplerow); //Parameterized for String []
因此,您有一个String
数组列表,它基本上等同于2D数组。
这意味着,当ArrayAdapter
将Text设置为您指定的TextView时,它会在整个数组对象上调用toString()
,因此就是哈希码。
考虑制作您自己的ArrayAdapter
并覆盖getView()
方法,以便它可以执行您想要执行的操作。网上有很多教程,例如this一个。
答案 1 :(得分:0)
我建议你制作一个POJO来保存你的数据。 POJO可以有一个名称,如CourseInfo
,明确定义其含义。同样,CourseInfo
的成员将明确定义他们所代表的内容。这比阵列更受欢迎,因为您可以清楚地定义每个数据的含义。通常,Java程序员在使用保存异构数据的数组时不屑一顾。在这种情况下,即使每个数据的类型相同,数组中每个元素的含义也不同。
此解决方案的优势在于您可以更改
listAdapter = new ArrayAdapter<String[]>(this, R.layout.simplerow);
到
listAdapter = new ArrayAdapter<CourseInfo>(this, R.layout.simplerow);