【发布时间】:2014-07-02 04:59:06
【问题描述】:
我在运行此代码时遇到问题,因为它在 name.setText(cn.getName()) 处给出了 java.nullpointerexception。我想要做的是用来自 sqlite 数据库的文本和图像填充列表视图。
这是mainactivity类:
listView = (ListView) findViewById(R.id.productlistview);
db = new DatabaseHandler(this);
int c = db.getItemsCount();
List<ItemList> items = db.getAllItems();
View header = (View)getLayoutInflater().inflate(R.layout.productlistview, null);
TextView name = (TextView)header.findViewById(R.id.name);
ImageView img = (ImageView)header.findViewById(R.id.photo);
TextView desc = (TextView)header.findViewById(R.id.description);
for (ItemList cn : items)
{
String imageURL = cn.getPhoto();
String fileName = imageURL.substring( imageURL.lastIndexOf('/')+1 );
String imgfile = null;
String imgURL = null;
try {
imgfile = URLEncoder.encode(fileName, "UTF-8").replace("+", "%20");
imgURL = ("http://www.khind.com.my/i_prod/" + imgfile);
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
name.setText(cn.getName());
Bitmap bitmap = DownloadImage(imgURL);
img.setImageBitmap(bitmap);
desc.setText(cn.getDescription());
listView.addHeaderView(header);
Log.d("Here the data:", cn.getName());
}
这是日志:
07-02 01:01:59.294: E/AndroidRuntime(885): FATAL EXCEPTION: main
07-02 01:01:59.294: E/AndroidRuntime(885): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.jmsb.khind/com.jmsb.khind.Fanlist}: java.lang.NullPointerException
07-02 01:01:59.294: E/AndroidRuntime(885): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
07-02 01:01:59.294: E/AndroidRuntime(885): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
07-02 01:01:59.294: E/AndroidRuntime(885): at android.app.ActivityThread.access$600(ActivityThread.java:141)
07-02 01:01:59.294: E/AndroidRuntime(885): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
07-02 01:01:59.294: E/AndroidRuntime(885): at android.os.Handler.dispatchMessage(Handler.java:99)
07-02 01:01:59.294: E/AndroidRuntime(885): at android.os.Looper.loop(Looper.java:137)
07-02 01:01:59.294: E/AndroidRuntime(885): at android.app.ActivityThread.main(ActivityThread.java:5103)
07-02 01:01:59.294: E/AndroidRuntime(885): at java.lang.reflect.Method.invokeNative(Native Method)
07-02 01:01:59.294: E/AndroidRuntime(885): at java.lang.reflect.Method.invoke(Method.java:525)
07-02 01:01:59.294: E/AndroidRuntime(885): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
07-02 01:01:59.294: E/AndroidRuntime(885): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
07-02 01:01:59.294: E/AndroidRuntime(885): at dalvik.system.NativeStart.main(Native Method)
07-02 01:01:59.294: E/AndroidRuntime(885): Caused by: java.lang.NullPointerException
07-02 01:01:59.294: E/AndroidRuntime(885): at com.jmsb.khind.Fanlist.onCreate(Fanlist.java:111)
07-02 01:01:59.294: E/AndroidRuntime(885): at android.app.Activity.performCreate(Activity.java:5133)
07-02 01:01:59.294: E/AndroidRuntime(885): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
07-02 01:01:59.294: E/AndroidRuntime(885): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
07-02 01:01:59.294: E/AndroidRuntime(885): ... 11 more
这是产品列表的 xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/relativelayout1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@drawable/background01" >
<RelativeLayout
android:id="@+id/relativelayout2"
android:layout_width="wrap_content"
android:layout_height="2dip"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:background="@drawable/divider01"/>
<RelativeLayout
android:id="@+id/relativelayout3"
android:layout_width="wrap_content"
android:layout_height="40dip"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true" >
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="10dip"
android:text="Model Name"
android:textStyle="bold"
android:textColor="#FFFFFF"
android:textSize="18sp" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/relativelayout4"
android:layout_width="wrap_content"
android:layout_height="2dip"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:background="@drawable/divider01"
android:layout_marginTop="38dip" />
<ScrollView
android:id="@+id/scroll"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_below="@+id/relativelayout4">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/photo"
android:layout_width="150dip"
android:layout_height="150dip"
android:layout_alignParentLeft="true"
android:layout_marginTop="20dp"
android:layout_marginLeft="20dp"
android:src="@drawable/no_image" />
<RelativeLayout
android:id="@+id/divide"
android:layout_width="wrap_content"
android:layout_height="2dip"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/photo"
android:layout_marginTop="20dp"
android:background="@drawable/divider01"/>
<TextView
android:id="@+id/description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/divide"
android:layout_marginLeft="20dip"
android:layout_marginTop="20dip"
android:text="Description Here"
android:textColor="#FFFFFF"
android:textSize="13sp" />
</RelativeLayout>
</ScrollView>
这是列表视图
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@+id/productlistview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<RelativeLayout
android:id="@+id/bottombar"
android:layout_width="wrap_content"
android:layout_height="60dip"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:background="@drawable/tab01_bottom" >
<Button
android:id="@+id/tab1"
android:layout_width="60dip"
android:layout_height="60dip"
android:layout_toLeftOf="@+id/tab2"
android:background="@drawable/button04home" />
<Button
android:id="@+id/tab2"
android:layout_width="60dip"
android:layout_height="60dip"
android:layout_centerHorizontal="true"
android:layout_marginLeft="40dip"
android:layout_marginRight="40dip"
android:background="@drawable/button03product" />
<Button
android:id="@+id/tab3"
android:layout_width="60dip"
android:layout_height="60dip"
android:layout_toRightOf="@+id/tab2"
android:background="@drawable/button02contact" />
</RelativeLayout>
【问题讨论】:
-
is Log.d("这里是数据:", cn.getName());在日志中显示 cn.getName() 的 anny 值?
-
您是否在日志中打印了项目的大小?
-
在将值设置为 TextView 之前为 cn.getName() 放置一个日志...看起来您正在为 cn.getName() 获取空值
-
您在哪里初始化了 ListView?
-
我得到了 Log.d(cn.getName) 的值。当它到达 setText 行时它就崩溃了。