I'm trying to retrieve recent location using GoogleApiClient on Android 4.2.2 (API 17) and the following exception comes:
12-26 17:31:34.591: I/dalvikvm(1015): Failed resolving Lcom/view/movieratingapp/MainActivity; interface 480 'Lcom/google/android/gms/common/api/GoogleApiClient$ConnectionCallbacks;'
12-26 17:31:34.591: W/dalvikvm(1015): Link of class 'Lcom/view/movieratingapp/MainActivity;' failed
12-26 17:31:42.142: W/jdwp(1015): Debugger is telling the VM to exit with code=1
12-26 17:31:42.142: I/dalvikvm(1015): GC lifetime allocation: 16367 bytes
12-26 17:31:42.451: E/Trace(1119): error opening trace file: No such file or directory (2)
12-26 17:31:42.512: I/dalvikvm(1119): Failed resolving Lcom/view/movieratingapp/MainActivity; interface 480 'Lcom/google/android/gms/common/api/GoogleApiClient$ConnectionCallbacks;'
12-26 17:31:42.512: W/dalvikvm(1119): Link of class 'Lcom/view/movieratingapp/MainActivity;' failed
12-26 17:31:42.521: D/AndroidRuntime(1119): Shutting down VM
12-26 17:31:42.521: W/dalvikvm(1119): threadid=1: thread exiting with uncaught exception (group=0x40a71930)
12-26 17:31:42.541: E/AndroidRuntime(1119): FATAL EXCEPTION: main
12-26 17:31:42.541: E/AndroidRuntime(1119): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.view.movieratingapp/com.view.movieratingapp.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "com.view.movieratingapp.MainActivity" on path: /data/app/com.view.movieratingapp-2.apk
12-26 17:31:42.541: E/AndroidRuntime(1119): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2106)
12-26 17:31:42.541: E/AndroidRuntime(1119): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
12-26 17:31:42.541: E/AndroidRuntime(1119): at android.app.ActivityThread.access$600(ActivityThread.java:141)
12-26 17:31:42.541: E/AndroidRuntime(1119): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
12-26 17:31:42.541: E/AndroidRuntime(1119): at android.os.Handler.dispatchMessage(Handler.java:99)
12-26 17:31:42.541: E/AndroidRuntime(1119): at android.os.Looper.loop(Looper.java:137)
12-26 17:31:42.541: E/AndroidRuntime(1119): at android.app.ActivityThread.main(ActivityThread.java:5041)
12-26 17:31:42.541: E/AndroidRuntime(1119): at java.lang.reflect.Method.invokeNative(Native Method)
12-26 17:31:42.541: E/AndroidRuntime(1119): at java.lang.reflect.Method.invoke(Method.java:511)
12-26 17:31:42.541: E/AndroidRuntime(1119): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
12-26 17:31:42.541: E/AndroidRuntime(1119): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
12-26 17:31:42.541: E/AndroidRuntime(1119): at dalvik.system.NativeStart.main(Native Method)
12-26 17:31:42.541: E/AndroidRuntime(1119): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.view.movieratingapp.MainActivity" on path: /data/app/com.view.movieratingapp-2.apk
12-26 17:31:42.541: E/AndroidRuntime(1119): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:65)
12-26 17:31:42.541: E/AndroidRuntime(1119): at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
12-26 17:31:42.541: E/AndroidRuntime(1119): at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
12-26 17:31:42.541: E/AndroidRuntime(1119): at android.app.Instrumentation.newActivity(Instrumentation.java:1054)
12-26 17:31:42.541: E/AndroidRuntime(1119): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2097)
12-26 17:31:42.541: E/AndroidRuntime(1119): ... 11 more
Here is the Manifest file:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.view.movieratingapp"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="11"
android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
</application>
</manifest>
This is the MainActivity File:
package com.view.movieratingapp;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Locale;
import android.app.Activity;
import android.app.Dialog;
import android.content.Intent;
import android.content.IntentSender;
import android.location.Location;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.DialogFragment;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.location.LocationServices;
public class MainActivity extends FragmentActivity implements
GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {
private GoogleApiClient mGoogleApiClient;
private Location mLastLocation;
private double latitude = 0;
private double longitude = 0;
private final static int CONNECTION_FAILURE_RESOLUTION_REQUEST = 9000;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
}
/**
* Called when the Activity becomes visible.
*/
@Override
protected void onStart() {
super.onStart();
// Connect the client.
if (isGooglePlayServicesAvailable()) {
mGoogleApiClient.connect();
}
}
/**
* Called when the Activity is no longer visible.
*/
@Override
protected void onStop() {
// Disconnecting the client invalidates it.
mGoogleApiClient.disconnect();
super.onStop();
}
/**
* Handle results returned to the FragmentActivity by Google Play services
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// Decide what to do based on the original request code
switch (requestCode) {
case CONNECTION_FAILURE_RESOLUTION_REQUEST:
/*
* If the result code is Activity.RESULT_OK, try to connect again
*/
switch (resultCode) {
case Activity.RESULT_OK:
mGoogleApiClient.connect();
break;
}
}
}
/**
* Check if GooglePlayServices is available before trying to use any
* Google APIs
* @return
*/
private boolean isGooglePlayServicesAvailable() {
// Check that Google Play services is available
int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
// If Google Play services is available
if (ConnectionResult.SUCCESS == resultCode) {
// In debug mode, log the status
Log.d("Location Updates", "Google Play services is available.");
return true;
} else {
// Get the error dialog from Google Play services
Dialog errorDialog = GooglePlayServicesUtil.getErrorDialog(resultCode, this,
CONNECTION_FAILURE_RESOLUTION_REQUEST);
// If Google Play services can provide an error dialog
if (errorDialog != null) {
// Create a new DialogFragment for the error dialog
ErrorDialogFragment errorFragment = new ErrorDialogFragment();
errorFragment.setDialog(errorDialog);
errorFragment.show(getSupportFragmentManager(), "Location Updates");
}
return false;
}
}
/**
* Called by Location Services when the request to connect the client
* finishes successfully. At this point, you can request the current
* location or start periodic updates
*/
@Override
public void onConnected(Bundle dataBundle) {
// Display the connection status
//Location location = mLocationClient.getLastLocation();
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
mGoogleApiClient);
if (mLastLocation != null) {
Toast.makeText(this, "GPS location was found!", Toast.LENGTH_SHORT).show();
latitude = mLastLocation.getLatitude();
longitude = mLastLocation.getLongitude();
} else {
Toast.makeText(this, "Current location was null, enable GPS on emulator!", Toast.LENGTH_SHORT).show();
}
}
/**
* Called by Location Services if the connection to the location client
* drops because of an error.
*/
public void onDisconnected() {
// Display the connection status
Toast.makeText(this, "Disconnected. Please re-connect.", Toast.LENGTH_SHORT).show();
}
/**
* Called by Location Services if the attempt to get Location Services fails.
*/
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
/*
* Google Play services can resolve some errors it detects. If the error
* has a resolution, try sending an Intent to start a Google Play
* services activity that can resolve error.
*/
if (connectionResult.hasResolution()) {
try {
// Start an Activity that tries to resolve the error
connectionResult.startResolutionForResult(this,
CONNECTION_FAILURE_RESOLUTION_REQUEST);
/*
* Thrown if Google Play services canceled the original
* PendingIntent
*/
} catch (IntentSender.SendIntentException e) {
// Log the error
e.printStackTrace();
}
} else {
Toast.makeText(getApplicationContext(),
"Sorry. Location services not available to you", Toast.LENGTH_LONG).show();
}
}
@Override
public void onConnectionSuspended(int cause) {
// TODO Auto-generated method stub
}
/**
* Define a DialogFragment that displays the error dialog
*/
public static class ErrorDialogFragment extends DialogFragment {
// Global field to contain the error dialog
private Dialog mDialog;
// Default constructor. Sets the dialog field to null
public ErrorDialogFragment() {
super();
mDialog = null;
}
// Set the dialog to display
public void setDialog(Dialog dialog) {
mDialog = dialog;
}
// Return a Dialog to the DialogFragment.
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return mDialog;
}
}
}
In properties -> android, GooglePlayServices rev 22 is set in the library part and IsLibrary is not ticked.
Project Build Target is Google APIs 17
SDK Build Tools being used is 18.1.1
Please provide suggestions on why this could happen