ArrayAdapter的Android NullPointerException

时间:2014-03-05 03:35:28

标签: android nullpointerexception android-arrayadapter

当我尝试创建SimpleAdapter的新实例时,我收到错误NullPointerException。我不太确定这里发生了什么。我传递setAdapter一个带有所有必需参数的Custom ArrayAdapter。请帮忙。提前谢谢。

这是我的代码[错误在第69行]:

package com.example.android.navigationdrawerexample;

import java.util.Locale;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.SearchManager;
import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Toast;  

public class MainActivity extends Activity {

    private DrawerLayout mDrawerLayout;
    private ListView mDrawerList;
    private ActionBarDrawerToggle mDrawerToggle;
    private CharSequence mDrawerTitle;
    private CharSequence mTitle;
    private String[] mPlanetTitles;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_new);

        mTitle = mDrawerTitle = getTitle();
        mPlanetTitles = getResources().getStringArray(R.array.planets_array);   //PULLS RESOURCES FROM XML FILE
        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mDrawerList = (ListView) findViewById(R.id.left_drawer);

        // set a custom shadow that overlays the main content when the drawer opens
        mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);       

        // set up the drawer's list view with items and click listener

        //mDrawerList.setAdapter(new ArrayAdapter<String>(this,R.layout.drawer_list_item, mPlanetTitles));

        mDrawerList.setAdapter(new SimpleAdapter(this, android.R.layout.simple_list_item_1, android.R.id.text1));
        mDrawerList.setOnItemClickListener(new DrawerItemClickListener());

        // enable ActionBar app icon to behave as action to toggle nav drawer

        getActionBar().setDisplayHomeAsUpEnabled(true);
        getActionBar().setHomeButtonEnabled(true);

        // ActionBarDrawerToggle ties together the the proper interactions
        // between the sliding drawer and the action bar app icon

        mDrawerToggle = new ActionBarDrawerToggle(
                this,                  /* host Activity */
                mDrawerLayout,         /* DrawerLayout object */
                R.drawable.ic_drawer,  /* nav drawer image to replace 'Up' caret */
                R.string.drawer_open,  /* "open drawer" description for accessibility */
                R.string.drawer_close  /* "close drawer" description for accessibility */
                ) {

            public void onDrawerClosed(View view) {

                getActionBar().setTitle(mTitle);
                invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()

            }

            public void onDrawerOpened(View drawerView) {

                getActionBar().setTitle(mDrawerTitle);
                invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()

            }
        };

        mDrawerLayout.setDrawerListener(mDrawerToggle);   

        if (savedInstanceState == null) {

            selectItem(0);

        }
    }

此处还有我的Logcat错误:

03-04 21:44:33.106: E/AndroidRuntime(14515): FATAL EXCEPTION: main
03-04 21:44:33.106: E/AndroidRuntime(14515): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.android.navigationdrawerexample/com.example.android.navigationdrawerexample.MainActivity}: java.lang.NullPointerException
03-04 21:44:33.106: E/AndroidRuntime(14515): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2266)
03-04 21:44:33.106: E/AndroidRuntime(14515): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2316)
03-04 21:44:33.106: E/AndroidRuntime(14515): at android.app.ActivityThread.access$600(ActivityThread.java:150)
03-04 21:44:33.106: E/AndroidRuntime(14515): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1298)
03-04 21:44:33.106: E/AndroidRuntime(14515): at android.os.Handler.dispatchMessage(Handler.java:99)
03-04 21:44:33.106: E/AndroidRuntime(14515): at android.os.Looper.loop(Looper.java:213)
03-04 21:44:33.106: E/AndroidRuntime(14515): at android.app.ActivityThread.main(ActivityThread.java:5225)
03-04 21:44:33.106: E/AndroidRuntime(14515): at java.lang.reflect.Method.invokeNative(Native Method)
03-04 21:44:33.106: E/AndroidRuntime(14515): at java.lang.reflect.Method.invoke(Method.java:525)
03-04 21:44:33.106: E/AndroidRuntime(14515): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
03-04 21:44:33.106: E/AndroidRuntime(14515): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
03-04 21:44:33.106: E/AndroidRuntime(14515): at dalvik.system.NativeStart.main(Native Method)
03-04 21:44:33.106: E/AndroidRuntime(14515): Caused by: java.lang.NullPointerException
03-04 21:44:33.106: E/AndroidRuntime(14515): at com.example.android.navigationdrawerexample.MainActivity.onCreate(MainActivity.java:69)
03-04 21:44:33.106: E/AndroidRuntime(14515): at android.app.Activity.performCreate(Activity.java:5133)
03-04 21:44:33.106: E/AndroidRuntime(14515): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
03-04 21:44:33.106: E/AndroidRuntime(14515): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2230)

2 个答案:

答案 0 :(得分:0)

我认为问题是SimpleAdapter

中没有传递任何值
new SimpleAdapter(this, android.R.layout.simple_list_item_1, android.R.id.text1));  

mPlanetTitles仍未使用

答案 1 :(得分:0)

您没有将任何值传递给SimpleAdapter

而不是:

mDrawerList.setAdapter(new SimpleAdapter(this, android.R.layout.simple_list_item_1, android.R.id.text1));

试试这个

mDrawerList.setAdapter(new SimpleAdapter(this, android.R.layout.simple_list_item_1, mPlanetTitles));

其中mPlanetTitles是您要在列表视图中显示的列表。