繁体   English   中英

我的列表视图上的空指针异常

[英]Null pointer exception on my listview

请帮助! 我一直在尝试使列表视图尽可能高效地工作,但是它始终使用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>

您的代码终止于FirstLoginActivity对象的实例初始化。

罪魁祸首是这条线:

String[] testcontacts = getResources().getStringArray(
        R.array.testcontacts_array);

移动初始化到onCreate处理程序, getResources很可能返回一个null在这一点-它是在初始化序列太早所有的活动线路要到位。

String[] testcontacts;

...

  // in onCreate
  testcontacts = getResources().getStringArray(R.array.testcontacts_array);

在达到以下条件时,您应该再次遇到NullPointerException:

    ListView lv = null;
    lv.setAdapter(aa);

正如其他答案所指出的那样-您缺少一次findViewById调用。

在代码中,您将在以下代码行的初始化过程中将ListView对象设置为null:

ListView lv = null;

初始化就可以了。 但是,在实际使用lv对象之前,您应该做类似的事情

lv = findViewById(R.layout.<yourlistviewid>);

一旦获得对列表视图对象的引用,就可以执行所有其他操作,例如设置adapter..etc。 在此之前,您将获得nullpointer异常。

您忘了在这里初始化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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM