Reputation: 27
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
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
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