TableRows将JSONObject数据转换为动态TableLayout

时间:2014-08-06 19:17:58

标签: java android xml json tablelayout

我试图在TableLayout中显示传递给JSONArray的JSONArray的数据。问题是我知道所有JSONObject都是正确的(将next_object.getString("id")的内容打印到Log.d工作中)所以它必须是我试图呈现数据的问题。

我的输出只是第一行,我在XML中静态生成,因为它只是每列的标题。

这个方法据说可以抓取TableLayout,循环遍历所有JSONObjects并一次添加一行数据。不幸的是,这个循环中断了,我不确定为什么(因为它只运行一次,但没有抛出异常)。

TableLayout table = (TableLayout) findViewById(R.id.accelerometer_table);

        for (int i = 0; i < in.length(); i++) {
            JSONObject nextData = in.getJSONObject(i);

            TableRow row = new TableRow(this);
            row.setPadding(20, 20, 20, 20);
            row.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));

            TextView date = new TextView(this);
            TextView xAxis = new TextView(this);
            TextView yAxis = new TextView(this);
            TextView zAxis = new TextView(this);

            date.setText(nextData.getString("date"));
            date.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
            date.setGravity(Gravity.CENTER);

            xAxis.setText(nextData.getString("x_axis"));
            xAxis.setGravity(Gravity.CENTER);

            yAxis.setText(nextData.getString("y_axis"));
            yAxis.setGravity(Gravity.CENTER);

            zAxis.setText(nextData.getString("z_axis"));
            zAxis.setGravity(Gravity.CENTER);

            row.addView(date);
            row.addView(xAxis);
            row.addView(yAxis);
            row.addView(zAxis);
            table.addView(row, new TableLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
        }

这里是包含该表的片段的XML:

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="12dp"
android:id="@+id/accelerometer_table"
android:stretchColumns="0,1,2,3" >

<TableRow
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <TextView
        android:text="@string/accelerometer_header_date"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center" />

    <TextView
        android:text="@string/accelerometer_header_x_axis"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center" />

    <TextView
        android:text="@string/accelerometer_header_y_axis"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center" />

    <TextView
        android:text="@string/accelerometer_header_z_axis"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center" />

</TableRow>

</TableLayout>

XML仅包含静态的标题行。其余部分应该由该行之后的第一部分中的Java代码动态生成,因为它们是实际的数据行。

谢谢!

1 个答案:

答案 0 :(得分:0)

什么是“in”。它在哪里宣布?

使用ListView!它比这更容易!完全没有循环!

另外,我建议您使用GSON作为JSON。