我在浏览时遇到了一个概念,即创建动态表行并为其添加内容。在下面描述代码 此代码抛出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();
}
}
请告诉我代码中出了什么问题?
LOG错误
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 :(得分:0)
我有同样的问题所以这是你的解决方案.. 不要将Tablelayout作为根布局 e.g
`<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>`
答案 1 :(得分:0)
最后我得到了解决方案
如果findViewById()
正在返回NPE,请尝试其中一些:
TableLayout
存在的正确布局setContentView
findViewById
我假设我列出的第三个选项很可能是你的问题。
在完成上述每个步骤后,重新清洁项目也会有所帮助。