2012-09-25 95 views
2

我碰到一個概念,同時衝浪創建動態錶行並添加內容。以下代碼描述 此代碼將引發NullPointerException。空指針異常動態添加TableRow到TableLayout

佈局:

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:stretchColumns="0,1" 
       android:id="@+id/tabledisplay" android:layout_weight="1" android:layout_height="wrap_content" android:layout_width="match_parent"> 
     </TableLayout> 

代碼

public void display_table(){ 
    try{ 
    TableLayout tl = (TableLayout)findViewById(R.id.tabledisplay); 

    DBConnection db= new DBConnection(); 
    Connection con=db.getConnection(); 
    Statement st=con.createStatement(); 
    ResultSet rs=st.executeQuery("select report_name,report_createddate,user_name from reports"); 
    TableRow tr_head = new TableRow(this); 
    tr_head.setId(10); 
    tr_head.setBackgroundColor(Color.GRAY); 
    tr_head.setLayoutParams(new LayoutParams(
    LayoutParams.FILL_PARENT, 
    LayoutParams.WRAP_CONTENT)); 
    TextView label_date = new TextView(this); 
    label_date.setId(20); 
    label_date.setText("DATE"); 
    label_date.setTextColor(Color.WHITE); 
    label_date.setPadding(5, 5, 5, 5); 
    tr_head.addView(label_date);// add the column to the table row here 

    TextView label_weight_kg = new TextView(this); 
    label_weight_kg.setId(21);// define id that must be unique 
    label_weight_kg.setText("Wt(Kg.)"); // set the text for the header 
    label_weight_kg.setTextColor(Color.WHITE); // set the color 
    label_weight_kg.setPadding(5, 5, 5, 5); // set the padding (if required) 
    tr_head.addView(label_weight_kg); // add the column to the table row here 
    tl.addView(tr_head, new TableLayout.LayoutParams(
      LayoutParams.FILL_PARENT, 
      LayoutParams.WRAP_CONTENT)); 
    Integer count=0; 
    while (rs.next()) { 
    String date = (rs.getString(1));// get the first variable 
    String weight_kg = (rs.getString(2));// get the second variable 
    // Create the table row 
    TableRow tr = new TableRow(this); 
    if(count%2!=0) tr.setBackgroundColor(Color.GRAY); 
    tr.setId(100+count); 
    tr.setLayoutParams(new LayoutParams(
    LayoutParams.FILL_PARENT, 
    LayoutParams.WRAP_CONTENT)); 

    //Create two columns to add as table data 
    // Create a TextView to add date 
    TextView labelDATE = new TextView(this); 
    labelDATE.setId(200+count); 
    labelDATE.setText(date); 
    labelDATE.setPadding(2, 0, 5, 0); 
    labelDATE.setTextColor(Color.WHITE); 
    tr.addView(labelDATE); 
    TextView labelWEIGHT = new TextView(this); 
    labelWEIGHT.setId(200+count); 
    labelWEIGHT.setText(weight_kg.toString()); 
    labelWEIGHT.setTextColor(Color.WHITE); 
    tr.addView(labelWEIGHT); 

    // finally add this to the table row 
    tl.addView(tr, new TableLayout.LayoutParams(
         LayoutParams.FILL_PARENT, 
         LayoutParams.WRAP_CONTENT)); 
       count++; 
      } 


    }catch (Exception e) { 
     // TODO: handle exception 
     Toast.makeText(getApplicationContext(),e.toString(),Toast.LENGTH_LONG).show(); 
    } 

} 

請讓我知道在我的代碼錯在何處?

日誌錯誤

09-25 10:02:58.125: I/System.out(560): java.lang.NullPointerException 09-25 
10:02:58.154: I/System.out(560): at 
android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:100) 09-25 
10:02:58.154: I/System.out(560): at 
co.analuo.app.HorzScrollWithListMenu.display_table(HorzScrollWithListMenu.java:189) 
09-25 10:02:58.164: I/System.out(560): at 
co.analuo.app.HorzScrollWithListMenu$1.onItemClick(HorzScrollWithListMenu.java:111) 
09-25 10:02:58.164: I/System.out(560): at 
android.widget.AdapterView.performItemClick(AdapterView.java:284) 09-25 10:02:58.164: 
I/System.out(560): at android.widget.ListView.performItemClick(ListView.java:3513) 
09-25 10:02:58.164: I/System.out(560): at 
android.widget.AbsListView$PerformClick.run(AbsListView.java:1812) 09-25 10:02:58.175: 
I/System.out(560): at android.os.Handler.handleCallback(Handler.java 
:587) 
09-25 10:02:58.185: I/System.out(560): at 
android.os.Handler.dispatchMessage(Handler.java:92) 
09-25 10:02:58.185: I/System.out(560): at android.os.Looper.loop(Looper.java:123) 
09-25 10:02:58.185: I/System.out(560): at 
android.app.ActivityThread.main(ActivityThread.java:3683) 
09-25 10:02:58.204: I/System.out(560): at 
java.lang.reflect.Method.invokeNative(Native Method) 
09-25 10:02:58.204: I/System.out(560): at 
java.lang.reflect.Method.invoke(Method.java:507) 
09-25 10:02:58.204: I/System.out(560):  at 
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
09-25 10:02:58.204: I/System.out(560): at 
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
09-25 10:02:58.204: I/System.out(560): at dalvik.system.NativeStart.main(Native Method) 
+0

你能指出,該行拋出NullPointerException異常。 – jeet

+0

at this line TableLayout tl =(TableLayout)findViewById(R.id.tabledisplay); – Sathish

+0

是否在調用setContentView之後調用此方法display_table。你能發佈完整的錯誤日誌嗎? – jeet

回答

0

最後我得到了解決

如果findViewById()正在返回NPE,請嘗試其中一些:

  • 通過清潔工程項目 - >清除... - >檢查項目 - >確定
  • 確保您有在ID絕對沒有拼寫錯誤
  • 確保內容查看時顯示正確的佈局,其中的TableLayout存在
  • 確保您setContentView之前findViewById

我假設我已經列出的第三個選項是最有可能您的問題。

重新清潔項目也可能有助於每個步驟後。

Refered從https://stackoverflow.com/a/11671533/1602230

0

我有同樣的問題,所以這是你的解決方案.. 不採取Tablelayout作爲根佈局 如

`<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" > 
<TableLayout 
    android:id="@+id/tlayoutID" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" /> 
</LinearLayout>` 
+0

我已經嘗試過你的建議仍然問題提示 – Sathish

+0

仍然得到相同的錯誤??或任何其他 –

+0

仍然收到相同的錯誤 – Sathish