Android 如何通过解析json数据动态添加表视图

Android 如何通过解析json数据动态添加表视图,android,json,tableview,Android,Json,Tableview,我正在将一个函数调用到线程中,并将这些对象放到tableView中,但我正在接受非法状态异常。我无法解决为什么?下面是我负责调用函数的代码: runOnUiThread(new Runnable() { fillTable(jArray); } }); 其功能是: pr

我正在将一个函数调用到线程中,并将这些对象放到tableView中,但我正在接受非法状态异常。我无法解决为什么?下面是我负责调用函数的代码:

 runOnUiThread(new Runnable() {

                                            fillTable(jArray);

                                    }
                               });
其功能是:

private void fillTable(JSONArray jArray){

    TextView t1v = new TextView(ReportAllActivity.this);
    TextView t2v = new TextView(ReportAllActivity.this);
    TextView t3v = new TextView(ReportAllActivity.this);
    TextView t4v = new TextView(ReportAllActivity.this);
    TextView t5v = new TextView(ReportAllActivity.this);
    TextView t6v = new TextView(ReportAllActivity.this);
    ArrayList<JSONObject> listdata = new ArrayList<JSONObject>();     
    for(int i = 0 ; i < jArray.length() ; i++)
    {
        listdata.add(jArray.optJSONObject(i));

    }
    int i = jArray.length()-1;

    while( i >= 0 )
    {
        try {
            json_data = listdata.get(i);
            //json_data = jArray.getJSONObject(i);
            TableRow tbrow = new TableRow(ReportAllActivity.this);
            t1v.setText(json_data.getString("heat"));
            t1v.setTextColor(Color.WHITE);
            t1v.setGravity(Gravity.CENTER);
            tbrow.addView(t1v);

            t2v.setText(json_data.getString("oc_count"));
            t2v.setTextColor(Color.WHITE);
            t2v.setGravity(Gravity.CENTER);
            tbrow.addView(t2v);

            t3v.setText(json_data.getString("who"));
            t3v.setTextColor(Color.WHITE);
            t3v.setGravity(Gravity.CENTER);
            tbrow.addView(t3v);

            t4v.setText(json_data.getString("alarm"));
            t4v.setTextColor(Color.WHITE);
            t4v.setGravity(Gravity.CENTER);
            tbrow.addView(t4v);


            t5v.setText(json_data.getString("do_duration"));
            t5v.setTextColor(Color.WHITE);
            t5v.setGravity(Gravity.CENTER);
            tbrow.addView(t5v);


            t6v.setText(json_data.getString("input_time"));
            t6v.setTextColor(Color.WHITE);
            t6v.setGravity(Gravity.CENTER_HORIZONTAL);
            tbrow.addView(t6v);
            listdata.remove(i);
            i--;
            reportTable.addView(tbrow);
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }  



    }
}

如何解决此问题?请提前感谢。

您的问题是因为在任何地方都使用相同的TextView而出现的

tbrow.addView(t1v)

您在每次迭代中都添加此视图。但这应该是不同的观点。
您应该在算法的每次迭代中创建不同的文本视图。

如果每次创建时都创建了文本视图,则由于数据太多,程序会出现OutOfMemory异常。我该如何处理?您应该设法优化程序内存管理。首先,您应该尝试从xml文件中膨胀TextView。类似这样的内容:
View footer=inflater.inflate(R.layout.footer\u lv\u事件,null)如果程序仍然失败,也许你应该只显示用户界面的一部分(所有视图的一半)。我想你应该问一个新问题。
    09-07 16:28:57.142: E/AndroidRuntime(696): FATAL EXCEPTION: main
09-07 16:28:57.142: E/AndroidRuntime(696): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
09-07 16:28:57.142: E/AndroidRuntime(696):  at android.view.ViewGroup.addViewInner(ViewGroup.java:1970)
09-07 16:28:57.142: E/AndroidRuntime(696):  at android.view.ViewGroup.addView(ViewGroup.java:1865)
09-07 16:28:57.142: E/AndroidRuntime(696):  at android.view.ViewGroup.addView(ViewGroup.java:1822) 
09-07 16:28:57.142: E/AndroidRuntime(696):  at android.view.ViewGroup.addView(ViewGroup.java:1802)
09-07 16:28:57.142: E/AndroidRuntime(696):  at com.example.hsvarge.ReportAllActivity.fillTable(ReportAllActivity.java:263)
09-07 16:28:57.142: E/AndroidRuntime(696):  at com.example.hsvarge.ReportAllActivity.access$1(ReportAllActivity.java:192)
09-07 16:28:57.142: E/AndroidRuntime(696):  at com.example.hsvarge.ReportAllActivity$3$1.run(ReportAllActivity.java:170)
09-07 16:28:57.142: E/AndroidRuntime(696):  at android.os.Handler.handleCallback(Handler.java:587)
09-07 16:28:57.142: E/AndroidRuntime(696):  at android.os.Handler.dispatchMessage(Handler.java:92)
09-07 16:28:57.142: E/AndroidRuntime(696):  at android.os.Looper.loop(Looper.java:123)
09-07 16:28:57.142: E/AndroidRuntime(696):  at android.app.ActivityThread.main(ActivityThread.java:4627)
09-07 16:28:57.142: E/AndroidRuntime(696):  at java.lang.reflect.Method.invokeNative(Native Method)
09-07 16:28:57.142: E/AndroidRuntime(696):  at java.lang.reflect.Method.invoke(Method.java:521)
09-07 16:28:57.142: E/AndroidRuntime(696):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
09-07 16:28:57.142: E/AndroidRuntime(696):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
09-07 16:28:57.142: E/AndroidRuntime(696):  at dalvik.system.NativeStart.main(Native Method)