2

動的なテーブル行を作成し、それにコンテンツを追加するためにネットサーフィンをしているときに、あるコンセプトに出会いました。コードの下に記述 このコードは NullPointerException をスローします。

レイアウト:

<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)
4

2 に答える 2

0

最後に私は解決策を得ました

findViewById()が NPE を返す場合は、次のいくつかを試してください。

  • プロジェクトを介してプロジェクトをクリーンアップします->クリーン...->プロジェクトを確認します-> OK
  • ID にスペルミスがないことを確認してください
  • TableLayoutcontentView が存在する正しいレイアウトを表示していることを確認してください
  • 必ずsetContentView事前にfindViewById

リストした 3 番目のオプションが問題である可能性が最も高いと思います。

これらの各手順の後に、プロジェクトを再クリーンアップすることも役立つ場合があります。

https://stackoverflow.com/a/11671533/1602230から参照

于 2012-09-26T03:59:30.637 に答える