请帮忙!我一直在尝试让我的列表视图尽可能高效地工作,但它会使用NullPointerException来强制关闭。这是我的LogCat。我真的无法弄明白。
12-31 14:32:35.552: D/AndroidRuntime(240): Shutting down VM
12-31 14:32:35.552: W/dalvikvm(240): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
12-31 14:32:35.552: E/AndroidRuntime(240): Uncaught handler: thread main exiting due to uncaught exception
12-31 14:32:35.602: E/AndroidRuntime(240): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.cerealBarApps/com.cerealBarApps.FirstLoginActivity}: java.lang.NullPointerException
12-31 14:32:35.602: E/AndroidRuntime(240): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2417)
12-31 14:32:35.602: E/AndroidRuntime(240): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
12-31 14:32:35.602: E/AndroidRuntime(240): at android.app.ActivityThread.access$2200(ActivityThread.java:119)
12-31 14:32:35.602: E/AndroidRuntime(240): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
12-31 14:32:35.602: E/AndroidRuntime(240): at android.os.Handler.dispatchMessage(Handler.java:99)
12-31 14:32:35.602: E/AndroidRuntime(240): at android.os.Looper.loop(Looper.java:123)
12-31 14:32:35.602: E/AndroidRuntime(240): at android.app.ActivityThread.main(ActivityThread.java:4363)
12-31 14:32:35.602: E/AndroidRuntime(240): at java.lang.reflect.Method.invokeNative(Native Method)
12-31 14:32:35.602: E/AndroidRuntime(240): at java.lang.reflect.Method.invoke(Method.java:521)
12-31 14:32:35.602: E/AndroidRuntime(240): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
12-31 14:32:35.602: E/AndroidRuntime(240): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
12-31 14:32:35.602: E/AndroidRuntime(240): at dalvik.system.NativeStart.main(Native Method)
12-31 14:32:35.602: E/AndroidRuntime(240): Caused by: java.lang.NullPointerException
12-31 14:32:35.602: E/AndroidRuntime(240): at android.content.ContextWrapper.getResources(ContextWrapper.java:80)
12-31 14:32:35.602: E/AndroidRuntime(240): at com.cerealBarApps.FirstLoginActivity.<init>(FirstLoginActivity.java:30)
12-31 14:32:35.602: E/AndroidRuntime(240): at java.lang.Class.newInstanceImpl(Native Method)
12-31 14:32:35.602: E/AndroidRuntime(240): at java.lang.Class.newInstance(Class.java:1479)
12-31 14:32:35.602: E/AndroidRuntime(240): at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
12-31 14:32:35.602: E/AndroidRuntime(240): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2409)
12-31 14:32:35.602: E/AndroidRuntime(240): ... 11 more
12-31 14:32:36.962: I/dalvikvm(240): threadid=7: reacting to signal 3
12-31 14:32:37.192: I/dalvikvm(240): Wrote stack trace to '/data/anr/traces.txt'
12-31 14:32:40.592: I/Process(240): Sending signal. PID: 240 SIG: 9
这是我的列表视图代码
public class FirstLoginActivity extends ListActivity {
Context mContext;
List mList;
String[] testcontacts;
MessageView aa = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
testcontacts = getResources()
.getStringArray(R.array.testcontacts_array);
aa = new MessageView();
ListView lv = getListView();
lv.setAdapter(aa);
lv.setTextFilterEnabled(true);
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// When clicked, show a toast with the TextView text
Toast.makeText(getApplicationContext(),
((TextView) view).getText(), Toast.LENGTH_SHORT).show();
}
});
}
class MessageView extends ArrayAdapter<String> {
MessageView() {
super(FirstLoginActivity.this, android.R.layout.activity_list_item,
testcontacts);
// TODO Auto-generated constructor stub
}
public View getView(int position, View convertview, ViewGroup parent) {
Log.d("Ebz", "inside getView method");
ViewHolder holder;
View v = convertview;
if (v == null) {
Log.d("Ebz", "if v == null");
LayoutInflater inflater = getLayoutInflater();
v = inflater.inflate(R.layout.list_items, null);
holder = new ViewHolder();
holder.firstLine = (TextView) v.findViewById(R.id.firstLine);
holder.secondLine = (TextView) v.findViewById(R.id.secondLine);
holder.icon1 = (ImageView) v.findViewById(R.id.icon1);
holder.icon2 = (ImageView) v.findViewById(R.id.icon2);
v.setTag(holder);
} else {
holder = (ViewHolder) v.getTag();
}
holder.firstLine.setText(testcontacts[position]);
holder.secondLine.setText(testcontacts[position]);
holder.icon1.setImageBitmap(null);
holder.icon2.setImageBitmap(null);
// call the images directly?
return v;
}
class ViewHolder {
TextView firstLine;
TextView secondLine;
ImageView icon1;
ImageView icon2;
}
}
}
我的XML:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:padding="6dip" >
<ImageView
android:id="@+id/icon1"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_alignParentBottom="true"
android:layout_alignParentTop="true"
android:layout_marginRight="6dip"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/secondLine"
android:layout_width="fill_parent"
android:layout_height="26dip"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_toRightOf="@id/icon1"
android:ellipsize="marquee"
android:singleLine="true"
android:text="Some more information" />
<TextView
android:id="@+id/firstLine"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_above="@id/secondLine"
android:layout_alignParentTop="true"
android:layout_alignWithParentIfMissing="true"
android:layout_toRightOf="@id/icon1"
android:gravity="center_vertical"
android:text="Some Information" />
<ImageView
android:id="@+id/icon2"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_marginRight="6dip"
android:src="@drawable/ic_launcher" />
</RelativeLayout>
答案 0 :(得分:3)
您的代码在FirstLoginActivity
对象的实例初始化中终止。
最有可能的罪魁祸首是这一行:
String[] testcontacts = getResources().getStringArray(
R.array.testcontacts_array);
将初始化移动到onCreate
处理程序,getResources
可能在此时返回null
- 在初始化序列中,所有Activity布线都到位为时尚早
String[] testcontacts;
...
// in onCreate
testcontacts = getResources().getStringArray(R.array.testcontacts_array);
到达时,您应该点击第二个NullPointerException:
ListView lv = null;
lv.setAdapter(aa);
正如其他答案所指出的那样 - 你错过了findViewById
电话。
答案 1 :(得分:1)
在代码中,您在以下代码行中初始化期间将ListView对象设置为null:
ListView lv = null;
初始化很好。但是,在实际使用lv object
之前,你应该做这样的事情lv = findViewById(R.layout.<yourlistviewid>);
获得对列表视图对象的引用后,您可以执行所有其他操作,如设置adapter..etc。在此之前,您将获得一个nullpointer异常。
答案 2 :(得分:1)
您忘记在此处初始化ListView
。
ListView lv = null;
lv.setAdapter(aa);
lv.setTextFilterEnabled(true);
按如下方式初始化。
ListView lv = (ListView) v.findViewById(R.id.ListViewID_From_XML);
lv.setAdapter(aa);
lv.setTextFilterEnabled(true);