我正在将一个函数调用到一个线程中,并将这些对象放到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();
}
}
}
和我的LogCat文件:
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)
如何解决此问题?提前致谢。
答案 0 :(得分:1)
出现问题是因为到处使用相同的TextView。
tbrow.addView(t1v);
您将在每次迭代时添加此视图。但它应该是不同的观点。 您应该在算法的每次迭代中创建不同的TextView。