2013-01-15 35 views
0

当我尝试打印值到他们出来为[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> 

因此,每次一次,模块或演讲者被打印,它应该在它自己的文本框中,但它不工作,我不知道为什么或如何解决它。

+1

它是如何 '不工作'?它崩溃了吗?显示错误的东西,如果是这样,它怎么错了? – iagreen

回答

2

这很可能是因为您的ArrayAdapter设置为接受String数组(String [])。

listAdapter = new ArrayAdapter<String[]>(this, R.layout.simplerow); //Parameterized for String [] 

因此,您有一个String数组的列表,它基本上相当于一个2D数组。

这意味着,当ArrayAdapter将文本设置为您指定的TextView时,它将在整个数组对象上调用toString(),因此也就是哈希码。

考虑制作自己的ArrayAdapter并覆盖getView()方法,以便它可以执行您想要的操作。网上有很多教程,比如this之一。

+0

非常感谢,完美的工作!剩下的一些小事完成了。 – Mary

0

我建议你做一个POJO来保存你的数据。 POJO可以有一个名称,例如CourseInfo,它清楚地定义了它的含义。同样,CourseInfo的成员将明确定义他们代表的内容。这比数组更受欢迎,因为您可以清楚地定义每条数据的含义。通常,Java程序员对使用保存异构数据的数组感到不满。在这种情况下,即使每条数据的类型相同,数组中每个元素的含义都不相同。

该方案的优点是你可以改变

listAdapter = new ArrayAdapter<String[]>(this, R.layout.simplerow); 

listAdapter = new ArrayAdapter<CourseInfo>(this, R.layout.simplerow);