user3391426
user3391426

Reputation: 431

NullPointerException on getAction( ) or Intent

I wanted to utilize the search view widget in the action bar with the Google Places API and stumbled upon a link to a tutorial that was shared in various posts on Stack Overflow, so I decided to check it out. I have it all implemented into my existing code, but I am getting a NullPointerException and am hoping someone can help me out a bit, so I can debug the issue. I've been browsing through various posts on Stack Overflow and articles via Google...

Logcat specifies that it is caused by lines 119 and 123.

MainActivity.java:

public class MainActivity extends FragmentActivity implements
GooglePlayServicesClient.ConnectionCallbacks,
GooglePlayServicesClient.OnConnectionFailedListener,
LocationListener,
OnMapLongClickListener,
LoaderCallbacks<Cursor> {

//Global Constants
private final static int CONNECTION_FAILURE_RESOLUTION_REQUEST = 9000;

// Milliseconds per second
private static final int MILLISECONDS_PER_SECOND = 1000;
// Update frequency in seconds
public static final int UPDATE_INTERVAL_IN_SECONDS = 5;
// Update frequency in milliseconds
private static final long UPDATE_INTERVAL =
        MILLISECONDS_PER_SECOND * UPDATE_INTERVAL_IN_SECONDS;
// The fastest update frequency, in seconds
private static final int FASTEST_INTERVAL_IN_SECONDS = 1;
// A fast frequency ceiling in milliseconds
private static final long FASTEST_INTERVAL =
        MILLISECONDS_PER_SECOND * FASTEST_INTERVAL_IN_SECONDS;


//Global Variables
GoogleMap map;
Marker marker;
LocationRequest requestLocation;
LocationClient locationClient;
LocationManager locationManager;
boolean updatesRequested;
Geofence geoFence;
Vibrator vibStatus;


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

    // Create the LocationRequest object
    requestLocation = LocationRequest.create();
    // Use high accuracy
    requestLocation.setPriority(
            LocationRequest.PRIORITY_HIGH_ACCURACY);
    // Set the update interval to 5 seconds
    requestLocation.setInterval(UPDATE_INTERVAL);
    // Set the fastest update interval to 1 second
    requestLocation.setFastestInterval(FASTEST_INTERVAL);


    SupportMapFragment fragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
    map = fragment.getMap();

    //Enables "My Location" button on map fragment
    map.getUiSettings().setMyLocationButtonEnabled(true);

    //Create a new location client, using the enclosing class to handle callbacks.
    locationClient = new LocationClient(this, this, this);
    // Start with updates turned off
    updatesRequested = false;

    //
    map.setOnMapLongClickListener(this);

    // Look up the AdView as a resource and load a request.
    AdView adView = (AdView)this.findViewById(R.id.adView);
    AdRequest adRequest = new AdRequest.Builder().build();
    adView.loadAd(adRequest);

    handleIntent(getIntent()); //This is line 119 in my code
  }

private void handleIntent(Intent intent){
    if(intent.getAction().equals(Intent.ACTION_SEARCH)){ //This is line 123 in my code
        doSearch(intent.getStringExtra(SearchManager.QUERY));
    }else if(intent.getAction().equals(Intent.ACTION_VIEW)){
        getPlace(intent.getStringExtra(SearchManager.EXTRA_DATA_KEY));
    }
}

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    setIntent(intent);
    handleIntent(intent);
}
...
}

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com...." //Removed while posting on forum
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="10"
    android:targetSdkVersion="19" />

<!-- Protect the map component of the application using application signature -->
<permission
    android:name="com.....permission.MAPS_RECEIVE" //Removed while posting on forum
    android:protectionLevel="signature" />

<!-- Allows to receive map -->
<uses-permission android:name="com.....permission.MAPS_RECEIVE" /> //Removed while posting on forum

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.VIBRATE" />

<uses-feature
    android:glEsVersion="0x00020000"
    android:required="true" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/Theme.AppCompat.Light.DarkActionBar" >
    <activity
        android:name="com.....SplashActivity" //Removed while posting on forum
        android:label="@string/app_name"
        android:screenOrientation="portrait" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name="com.....MainActivity" //Removed while posting on forum
        android:label="@string/app_name"
        android:launchMode="singleTop"
        android:screenOrientation="portrait" >
        <intent-filter>
            <action android:name="android.intent.action.SEARCH" />
        </intent-filter>
        <!-- Points to searchable activity -->
        <meta-data android:name="android.app.default_searchable"
            android:value="com.....MainActivity" /> //Removed while posting on forum

        <!-- Points to searchable meta data -->
        <meta-data android:name="android.app.searchable"
            android:resource="@xml/searchable"/>
    </activity>

    <activity
        android:name="com.....PreferencesActivity" //Removed while posting on forum
        android:label="@string/title_activity_settings"
        android:parentActivityName="com.....MainActivity" //Removed while posting on forum
        android:screenOrientation="portrait" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.....MainActivity" /> //Removed while posting on forum
    </activity>
    <activity
        android:name="com.....AlarmActivity" //Removed while posting on forum
        android:label="@string/title_activity_alarm" >
    </activity>
    <activity
        android:name="com.google.android.gms.ads.AdActivity"
        android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" />
    <activity
        android:name="com.....PlaceJSONParser" //Removed while posting on forum
        android:label="@string/title_activity_place_jsonparser" >
    </activity>
    <activity
        android:name="com.....PlaceDetailsJSONParser" //Removed while posting on forum
        android:label="@string/title_activity_place_details_jsonparser" >
    </activity>
    <activity
        android:name="com.....PlaceProvider" //Removed while posting on forum
        android:label="@string/title_activity_place_provider" >
    </activity>

     <provider
        android:name=".PlaceProvider"
        android:authorities="com.....PlaceProvider" //Removed while posting on forum
        android:exported="false" />

    <meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version" />
    <meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="MY-KEY-HERE" /> //Removed while posting on forum

</application>

</manifest>

Upvotes: 3

Views: 1377

Answers (2)

Shoaib Anwar
Shoaib Anwar

Reputation: 849

send and intent action from your previous activity before calling your current activity or service.

Upvotes: 0

David C Adams
David C Adams

Reputation: 1973

You are starting MainActivity from SplashActivity? When something happens in the search view? It looks like it. When you call startActivity(intent), you need to make sure you have added an action to the intent:

Intent mainActivityIntent = new Intent(context);
mainActivityIntent.setAction(Intent.ACTION_SEARCH);
startActivity(mainActivityIntent);

If you, or whatever calls your MainActivity using an intent, doesn't set an action on the intent, you are going to get a null pointer when you try to do a getAction() on the calling intent in your Activity.

Upvotes: 3

Related Questions