在android中使用表时出现IllegalStateException

时间:2014-01-05 14:58:23

标签: java android

当我执行以下代码时,我收到IllegalStateException ..

public class DatabaseView extends Activity{
 TextView tv;
 MySQLiteHelper h;
 TableLayout main;
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub

    super.onCreate(savedInstanceState);
    setContentView(R.layout.newview);
    h=new MySQLiteHelper(this);
    main=(TableLayout) findViewById(R.id.tb1);

    table();

}
private void table() {
    // TODO Auto-generated method stub
TableRow header_row=new TableRow(this); 
header_row.setLayoutParams(new LayoutParams(
        LayoutParams.WRAP_CONTENT,
        LayoutParams.WRAP_CONTENT));

TextView item=new TextView(this);
item.setText("Item");
header_row.addView(item);

TextView amt=new TextView(this);
amt.setText("Amount");
header_row.addView(amt);
main.addView(header_row, new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
Cursor c=h.getAllEntry();
c.moveToFirst();
do

{
TableRow tr=new TableRow(this); 
tr.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));  
TextView tv=new TextView(this);
Log.d(" ", c.getString(2));
tv.setText(c.getString(2));
tr.addView(item);

TextView amnt=new TextView(this);
Log.d(" ", c.getString(1));
amnt.setText(c.getString(1));
tr.addView(amt);    

tr.addView(tv);
tr.addView(amnt);
main.addView(tr,new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
c.moveToNext();
}while(!c.isAfterLast());

}

错误日志是 -


  

AndroidRuntime(1692):致命异常:主要   AndroidRuntime(1692):java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.expensesdatabase / com.example.expensesdatabase.DatabaseView}:> java.lang.IllegalStateException:指定的子项已经有父项。您必须首先在孩子的父母上调用removeView()。   AndroidRuntime(1692):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)   AndroidRuntime(1692):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)   AndroidRuntime(1692):在android.app.ActivityThread.access $ 600(ActivityThread.java:141)   AndroidRuntime(1692):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1256)   AndroidRuntime(1692):在android.os.Handler.dispatchMessage(Handler.java:99)   AndroidRuntime(1692):在android.os.Looper.loop(Looper.java:137)   AndroidRuntime(1692):在android.app.ActivityThread.main(ActivityThread.java:5103)   AndroidRuntime(1692):at java.lang.reflect.Method.invokeNative(Native Method)   AndroidRuntime(1692):在java.lang.reflect.Method.invoke(Method.java:525)


请说明为什么会发生这种错误并解决相同问题。提前谢谢。

1 个答案:

答案 0 :(得分:0)

在do-while循环中,您重新添加了已添加到父级的itemamt次视图。

当您查看已发布的部分下方的logcat时,很容易诊断出这样的错误。它下面有一个“由...引起”的例外,它指向了确切的代码行。