数组不打印它应该是什么 - android

时间:2013-01-15 00:34:38

标签: android listview

当我尝试将值打印到文本字段时,它们显示为[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>

因此,每次打印时间,模块或讲师时,都应该在自己的文本视图框中。但它不起作用,我不知道为什么或如何解决它。

2 个答案:

答案 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);