setAdapter()函数的空指针异常

时间:2015-01-14 13:01:47

标签: android

我正在尝试在android中实现抽屉,但在设置适配器时会出现空指针异常。

mNavigationDrawerItemTitles = getResources().getStringArray(R.array.navigation_drawer_items_array);
        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mDrawerList = (ListView) findViewById(R.id.drawer_list);

        ObjectDrawerItem[] drawerItem = new ObjectDrawerItem[3];

        drawerItem[0] = new ObjectDrawerItem(R.drawable.logout);
        drawerItem[1] = new ObjectDrawerItem(R.drawable.ic_launcher);
        drawerItem[2] = new ObjectDrawerItem(R.drawable.ic_launcher);

        // Pass the folderData to our ListView adapter
        //DrawerItemCustomAdapter adapter = new DrawerItemCustomAdapter(this, R.layout.listview_row_item, drawerItem);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(getBaseContext(), 
                R.layout.listview_row_item, mNavigationDrawerItemTitles);
        // Set the adapter for the list view
        mDrawerList.setAdapter(adapter);

        mTitle = mDrawerTitle = getTitle();

对象类:

public class ObjectDrawerItem {

    public int icon;
    public String name;

    // Constructor.
    public ObjectDrawerItem(int icon) {

        this.icon = icon;

    }


}

我的资源中有一个名为navigation_drawer_items_array

的数组列表

的logcat

01-14 07:54:25.081: E/AndroidRuntime(2252): FATAL EXCEPTION: main
01-14 07:54:25.081: E/AndroidRuntime(2252): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.yolove/com.yolove.main.HomeActivity}: java.lang.NullPointerException
01-14 07:54:25.081: E/AndroidRuntime(2252):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
01-14 07:54:25.081: E/AndroidRuntime(2252):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
01-14 07:54:25.081: E/AndroidRuntime(2252):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
01-14 07:54:25.081: E/AndroidRuntime(2252):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
01-14 07:54:25.081: E/AndroidRuntime(2252):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-14 07:54:25.081: E/AndroidRuntime(2252):     at android.os.Looper.loop(Looper.java:137)
01-14 07:54:25.081: E/AndroidRuntime(2252):     at android.app.ActivityThread.main(ActivityThread.java:5103)
01-14 07:54:25.081: E/AndroidRuntime(2252):     at java.lang.reflect.Method.invokeNative(Native Method)
01-14 07:54:25.081: E/AndroidRuntime(2252):     at java.lang.reflect.Method.invoke(Method.java:525)
01-14 07:54:25.081: E/AndroidRuntime(2252):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
01-14 07:54:25.081: E/AndroidRuntime(2252):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
01-14 07:54:25.081: E/AndroidRuntime(2252):     at dalvik.system.NativeStart.main(Native Method)
01-14 07:54:25.081: E/AndroidRuntime(2252): Caused by: java.lang.NullPointerException
01-14 07:54:25.081: E/AndroidRuntime(2252):     at com.yolove.main.HomeActivity.onCreate(HomeActivity.java:182)
01-14 07:54:25.081: E/AndroidRuntime(2252):     at android.app.Activity.performCreate(Activity.java:5133)
01-14 07:54:25.081: E/AndroidRuntime(2252):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
01-14 07:54:25.081: E/AndroidRuntime(2252):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
01-14 07:54:25.081: E/AndroidRuntime(2252):     ... 11 more

列表项

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="?android:attr/activatedBackgroundIndicator"
    android:minHeight="?android:attr/listPreferredItemHeightSmall"
    android:padding="10dp" >

    <ImageView
        android:id="@+id/imageViewIcon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:paddingRight="10dp" />

    <TextView
        android:id="@+id/textViewName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_toRightOf="@+id/imageViewIcon"
        android:paddingRight="10dp"
        android:text="Folder name here."
        android:textAppearance="?android:attr/textAppearanceListItemSmall"
        android:textColor="#ffffff" />

</RelativeLayout>

抽屉布局

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <!-- The main content view -->

    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    <!-- The navigation drawer -->

    <ListView
        android:id="@+id/drawer_list"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="#111"
        android:choiceMode="singleChoice"
        android:divider="@android:color/transparent"
        android:dividerHeight="0dp" />

</android.support.v4.widget.DrawerLayout>

2 个答案:

答案 0 :(得分:0)

您的ListView似乎为空。您的onCreate方法是否已正确初始化?

@Override
public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);
   ...
}

答案 1 :(得分:0)

您误导了ListView - 现有代码:

    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    mDrawerList = (ListView) findViewById(R.id.drawer_list);

将尝试获取&#34; drawer_list&#34;您的Activity布局中的元素,而不是您的&#34; drawer_layout&#34;。您需要在&#34; drawer_layout&#34;上findViewById mDrawerList = (ListView) mDrawerLayout.findViewById(R.id.drawer_list); 像这样:

{{1}}

你不清楚你的&#34; DrawerLayout&#34;正确 - 你需要给它充气或正确引用它。