Lehi
Lehi

Reputation: 27

NullPointerException on Drawer Navigation

While I'm not new to programming I am new to Android and I've been having a problem with an app I'm working on.

The app is a map, using Google Maps Api. I got that working and decided I wanted a fancy drawer navigation to go with it. That has not bee as smooth.

I can see that the error is line 74 but I can't figure out what to do about it. I've looked up a lot of people with the same problem but their reasons seemed to be different than mine for getting this error.

Here's lines 74 and 75, which are what give me errors:

mDrawerList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mDrawerListItems));
        mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener()

Here's everything:

    package com.example.lehi.byu_idahomaps;

import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import android.widget.PopupMenu;
import android.view.MenuInflater;


import com.google.android.gms.maps.CameraUpdate;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;

public class MapsActivity extends ActionBarActivity implements PopupMenu.OnMenuItemClickListener {

    // Locations for all buildings on campus.
    private final LatLng LOCATION_CAMPUS = new LatLng(43.815489, -111.783012);
    private final LatLng LOCATION_SMITH = new LatLng(43.819230, -111.781481);
    private final LatLng LOCATION_HART = new LatLng(43.819780, -111.785261);
    private final LatLng LOCATION_RICKS = new LatLng(43.815120, -111.781303);
    private final LatLng LOCATION_AUSTIN = new LatLng(43.816018, -111.784543);
    private final LatLng LOCATION_ICENTER = new LatLng(43.818782, -111.785176);
    private final LatLng LOCATION_BENSON = new LatLng(43.815569, -111.783255);
    private final LatLng LOCATION_CLARKE = new LatLng(43.820492, -111.781796);
    private final LatLng LOCATION_HEALTH = new LatLng(43.817017, -111.779275);
    private final LatLng LOCATION_HINCKLEY = new LatLng(43.816080, -111.779876);
    private final LatLng LOCATION_KIMBALL = new LatLng(43.817249, -111.781506);
    private final LatLng LOCATION_KIRKHAM = new LatLng(43.821336, -111.781657);
    private final LatLng LOCATION_MC = new LatLng(43.818619, -111.782611);
    private final LatLng LOCATION_MCKAY = new LatLng(43.819587, -111.783159);
    private final LatLng LOCATION_ROMNEY = new LatLng(43.820423, -111.783148);
    private final LatLng LOCATION_SNOW = new LatLng(43.821414, -111.783652);
    private final LatLng LOCATION_SPORI = new LatLng(43.821019, -111.782300);
    private final LatLng LOCATION_TAYLOR = new LatLng(43.817171, -111.782408);

    // Our map
    private GoogleMap map; // Might be null if Google Play services APK is not available.
    // Our marker object
    Marker marker;

    DrawerLayout mDrawerLayout;
    ListView mDrawerList;
    ActionBarDrawerToggle mDrawerToggle;
    String[] mDrawerListItems;

    //Creates the map, sets it to the campus location, and turns on your location
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);

        map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
        CameraUpdate start = CameraUpdateFactory.newLatLngZoom(LOCATION_CAMPUS, 15);
        map.moveCamera(start);
        map.setMyLocationEnabled(true);

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer);
        mDrawerList = (ListView)findViewById(android.R.id.list);
        mDrawerListItems = getResources().getStringArray(R.array.drawer_list);
        mDrawerList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mDrawerListItems));
        mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                int editedPosition = position + 1;
                Toast.makeText(MapsActivity.this, "You selected item " + editedPosition, Toast.LENGTH_SHORT).show();
                mDrawerLayout.closeDrawer(mDrawerList);
            }
        });
        mDrawerToggle = new ActionBarDrawerToggle(this,
                mDrawerLayout,
                toolbar,
                R.string.drawer_open,
                R.string.drawer_close) {
            public void onDrawerClosed(View v) {
                super.onDrawerClosed(v);
                invalidateOptionsMenu();
                syncState();
            }

            public void onDrawerOpened(View v) {
                super.onDrawerOpened(v);
                invalidateOptionsMenu();
                syncState();
            }
        };
        mDrawerLayout.setDrawerListener(mDrawerToggle);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setHomeButtonEnabled(true);
        mDrawerToggle.syncState();
    }

    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        mDrawerToggle.syncState();
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        mDrawerToggle.onConfigurationChanged(newConfig);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home: {
                if (mDrawerLayout.isDrawerOpen(mDrawerList)) {
                    mDrawerLayout.closeDrawer(mDrawerList);
                } else {
                    mDrawerLayout.openDrawer(mDrawerList);
                }
                return true;
            }
            default:
                return super.onOptionsItemSelected(item);
        }
    }


    public void showPopUp(View v) {
        PopupMenu popup = new PopupMenu(this, v);
        popup.setOnMenuItemClickListener(MapsActivity.this);
        MenuInflater inflater = popup.getMenuInflater();
        inflater.inflate(R.menu.popup, popup.getMenu());
        popup.show();
    }

    @Override
    protected void onResume() {
        super.onResume();
    }


    @Override
    public boolean onMenuItemClick(MenuItem item) {
        CameraUpdate update;
        switch (item.getItemId()) {
            case R.id.austin:
                if (marker != null) {
                    marker.remove();
                }
                map.setMapType(GoogleMap.MAP_TYPE_NORMAL);
                update = CameraUpdateFactory.newLatLngZoom(LOCATION_AUSTIN, 18);
                marker = map.addMarker(new MarkerOptions()
                        .position(LOCATION_AUSTIN)
                        .title("Mark Austin")
                        .snippet("College of Physical Sciences & Engineering"));
                map.animateCamera(update);
                return true;

            case R.id.icenter:
                if (marker != null) {
                    marker.remove();
                }
                map.setMapType(GoogleMap.MAP_TYPE_NORMAL);
                update = CameraUpdateFactory.newLatLngZoom(LOCATION_ICENTER, 18);
                marker = map.addMarker(new MarkerOptions()
                        .position(LOCATION_ICENTER)
                        .title("BYU-I Center"));
                map.animateCamera(update);
                return true;

            case R.id.benson:
                if (marker != null) {
                    marker.remove();
                }
                map.setMapType(GoogleMap.MAP_TYPE_NORMAL);
                update = CameraUpdateFactory.newLatLngZoom(LOCATION_BENSON, 18);
                marker = map.addMarker(new MarkerOptions()
                        .position(LOCATION_BENSON)
                        .title("Ezra Taft Benson")
                        .snippet("College of Agriculture and Life Sciences"));
                map.animateCamera(update);
                return true;

            case R.id.clarke:
                if (marker != null) {
                    marker.remove();
                }
                map.setMapType(GoogleMap.MAP_TYPE_NORMAL);
                update = CameraUpdateFactory.newLatLngZoom(LOCATION_CLARKE, 18);
                marker = map.addMarker(new MarkerOptions()
                        .position(LOCATION_CLARKE)
                        .title("John L. Clarke"));
                map.animateCamera(update);
                return true;

            case R.id.hart:
                if (marker != null) {
                    marker.remove();
                }
                map.setMapType(GoogleMap.MAP_TYPE_NORMAL);
                update = CameraUpdateFactory.newLatLngZoom(LOCATION_HART, 19);
                marker = map.addMarker(new MarkerOptions()
                        .position(LOCATION_HART)
                        .title("John W. Hart"));
                map.animateCamera(update);
                return true;

            case R.id.health:
                if (marker != null) {
                    marker.remove();
                }
                map.setMapType(GoogleMap.MAP_TYPE_NORMAL);
                update = CameraUpdateFactory.newLatLngZoom(LOCATION_HEALTH, 18);
                marker = map.addMarker(new MarkerOptions()
                        .position(LOCATION_HEALTH)
                        .title("Student Health Center"));
                map.animateCamera(update);
                return true;

            case R.id.hinckley:
                if (marker != null) {
                    marker.remove();
                }
                map.setMapType(GoogleMap.MAP_TYPE_NORMAL);
                update = CameraUpdateFactory.newLatLngZoom(LOCATION_HINCKLEY, 18);
                marker = map.addMarker(new MarkerOptions()
                        .position(LOCATION_HINCKLEY)
                        .title("Gordan B. Hinckley")
                        .snippet("College of Education & Human Development"));
                map.animateCamera(update);
                return true;

            case R.id.kimball:
                if (marker != null) {
                    marker.remove();
                }
                map.setMapType(GoogleMap.MAP_TYPE_NORMAL);
                update = CameraUpdateFactory.newLatLngZoom(LOCATION_KIMBALL, 18);
                marker = map.addMarker(new MarkerOptions()
                        .position(LOCATION_KIMBALL)
                        .title("Spencer W. Kimball"));
                map.animateCamera(update);
                return true;

            case R.id.kirkham:
                if (marker != null) {
                    marker.remove();
                }
                map.setMapType(GoogleMap.MAP_TYPE_NORMAL);
                update = CameraUpdateFactory.newLatLngZoom(LOCATION_KIRKHAM, 18);
                marker = map.addMarker(new MarkerOptions()
                        .position(LOCATION_KIRKHAM)
                        .title("Oscar A. Kirkham"));
                map.animateCamera(update);
                return true;

            case R.id.mc:
                if (marker != null) {
                    marker.remove();
                }
                map.setMapType(GoogleMap.MAP_TYPE_NORMAL);
                update = CameraUpdateFactory.newLatLngZoom(LOCATION_MC, 18);
                marker = map.addMarker(new MarkerOptions()
                        .position(LOCATION_MC)
                        .title("Hyrum Manwaring"));
                map.animateCamera(update);
                return true;

            case R.id.mckay:
                if (marker != null) {
                    marker.remove();
                }
                map.setMapType(GoogleMap.MAP_TYPE_NORMAL);
                update = CameraUpdateFactory.newLatLngZoom(LOCATION_MCKAY, 18);
                marker = map.addMarker(new MarkerOptions()
                        .position(LOCATION_MCKAY)
                        .title("David O. McKay Library"));
                map.animateCamera(update);
                return true;

            case R.id.ricks:
                if (marker != null) {
                    marker.remove();
                }
                map.setMapType(GoogleMap.MAP_TYPE_NORMAL);
                update = CameraUpdateFactory.newLatLngZoom(LOCATION_RICKS, 19);
                marker = map.addMarker(new MarkerOptions()
                        .position(LOCATION_RICKS)
                        .title("Thomas E. Ricks"));
                map.animateCamera(update);
                return true;

            case R.id.romney:
                if (marker != null) {
                    marker.remove();
                }
                map.setMapType(GoogleMap.MAP_TYPE_NORMAL);
                update = CameraUpdateFactory.newLatLngZoom(LOCATION_ROMNEY, 18);
                marker = map.addMarker(new MarkerOptions()
                        .position(LOCATION_ROMNEY)
                        .title("George S. Romney"));
                map.animateCamera(update);
                return true;

            case R.id.smith:
                if (marker != null) {
                    marker.remove();
                }
                map.setMapType(GoogleMap.MAP_TYPE_NORMAL);
                update = CameraUpdateFactory.newLatLngZoom(LOCATION_SMITH, 19);
                map.animateCamera(update);
                marker = map.addMarker(new MarkerOptions()
                        .position(LOCATION_SMITH)
                        .title("Joseph Fielding Smith")
                        .snippet("College of Business and Communication\n" +
                                "College of Language & Letters"));
                return true;

            case R.id.snow:
                if (marker != null) {
                    marker.remove();
                }
                map.setMapType(GoogleMap.MAP_TYPE_NORMAL);
                update = CameraUpdateFactory.newLatLngZoom(LOCATION_SNOW, 18);
                marker = map.addMarker(new MarkerOptions()
                        .position(LOCATION_SNOW)
                        .title("Eliza R. Snow"));
                map.animateCamera(update);
                return true;

            case R.id.spori:
                if (marker != null) {
                    marker.remove();
                }
                map.setMapType(GoogleMap.MAP_TYPE_NORMAL);
                update = CameraUpdateFactory.newLatLngZoom(LOCATION_SPORI, 18);
                marker = map.addMarker(new MarkerOptions()
                        .position(LOCATION_SPORI)
                        .title("Jacob Spori")
                        .snippet("College of Performing & Visual Arts"));
                map.animateCamera(update);
                return true;

            case R.id.taylor:
                if (marker != null) {
                    marker.remove();
                }
                map.setMapType(GoogleMap.MAP_TYPE_NORMAL);
                update = CameraUpdateFactory.newLatLngZoom(LOCATION_TAYLOR, 18);
                marker = map.addMarker(new MarkerOptions()
                        .position(LOCATION_TAYLOR)
                        .title("Taylor"));
                map.animateCamera(update);
                return true;

            default:
                if (marker != null) {
                    marker.remove();
                }
                map.setMapType(GoogleMap.MAP_TYPE_NORMAL);
                update = CameraUpdateFactory.newLatLngZoom(LOCATION_CAMPUS, 15);
                map.animateCamera(update);
                return true;
        }

    }

}

And here's my activity_maps.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MapsActivity"
    android:orientation="vertical">


    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        xmlns:android="http://schemas.android.com/apk/res/android" />


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


            <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                    xmlns:tools="http://schemas.android.com/tools"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    tools:context=".MapsActivity"
                    android:clickable="false"
                    android:background="#2a6ebb"
                    android:orientation="vertical">

                <ImageButton
                    xmlns:android="http://schemas.android.com/apk/res/android"
                    xmlns:tools="http://schemas.android.com/tools"
                    android:id="@+id/btnmenu"
                    android:layout_width="71dp"
                    android:layout_height="65dp"
                    android:src="@drawable/abc_ic_menu_moreoverflow_mtrl_alpha"
                    android:onClick="showPopUp"
                    android:background="#2a6ebb"
                    android:contentDescription="Slide out menu button" />

                <TextView
                    xmlns:android="http://schemas.android.com/apk/res/android"
                    xmlns:tools="http://schemas.android.com/tools"
                    android:layout_width="wrap_content"
                    android:layout_height="53dp"
                    android:id="@+id/edittext"
                    android:gravity="center_vertical|center_horizontal"
                    android:text="BYU-I Maps"
                    android:textSize="35sp"
                    android:textIsSelectable="false"
                    android:layout_gravity="center_horizontal"
                    android:layout_above="@+id/map"
                    android:layout_centerHorizontal="true"
                    android:layout_alignParentTop="true" />

                <fragment
                    xmlns:android="http://schemas.android.com/apk/res/android"
                    xmlns:tools="http://schemas.android.com/tools"
                    android:id="@+id/map"
                    android:name="com.google.android.gms.maps.MapFragment"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_below="@+id/btnmenu" />
            </RelativeLayout>

        <FrameLayout
            android:id="@+id/content_frame"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

        <ListView
            android:id="@+id/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>

</LinearLayout>

And here's the bloody error:

03-06 16:46:51.836  15778-15778/com.example.lehi.byu_idahomaps E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.example.lehi.byu_idahomaps, PID: 15778
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.lehi.byu_idahomaps/com.example.lehi.byu_idahomaps.MapsActivity}: java.lang.NullPointerException
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2438)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2497)
            at android.app.ActivityThread.access$900(ActivityThread.java:168)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1306)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:146)
            at android.app.ActivityThread.main(ActivityThread.java:5678)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.NullPointerException
            at com.example.lehi.byu_idahomaps.MapsActivity.onCreate(MapsActivity.java:74)
            at android.app.Activity.performCreate(Activity.java:5586)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2402)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2497)
            at android.app.ActivityThread.access$900(ActivityThread.java:168)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1306)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:146)
            at android.app.ActivityThread.main(ActivityThread.java:5678)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)
            at dalvik.system.NativeStart.main(Native Method)

Thanks for your help!

Upvotes: 1

Views: 97

Answers (2)

Singed
Singed

Reputation: 1113

Remove the android. in:

mDrawerList = (ListView)findViewById(android.R.id.list);

This would result in:

mDrawerList = (ListView)findViewById(R.id.list);

Upvotes: 0

Kevin van Mierlo
Kevin van Mierlo

Reputation: 9794

mDrawerList = (ListView)findViewById(android.R.id.list);

should be changed to this:

mDrawerList = (ListView)findViewById(R.id.list);

also remove the FrameLayout with id content_frame DrawerLayout should contain one content View(Group) and one list or fragment (which will be the drawer)

Upvotes: 1

Related Questions