I developed the gig guide application Alice, but I have run into a
problem I haven't been able to solve...

A bunch of users with Android 1.5 are reporting Force Closes because
of Verify Errors.

I have a LocationHelper class which has GeoPoint in one of its method
signatures. When I instantiate this class, a VerifyError is thrown.
The weird thing is seems to be very rarely thrown. I saw it only once
on my HTC Hero. I am unable to reproduce it, but I know that a lot of
my 1.5 users get this problem.

Problem Class

public class LocationHelper implements LocationListener {

        public static final double RADIUS_KILOMETERS = 6378;
        public static final double RADIUS_MILES = 3963;

        private static LocationHelper instance;
        private GeoPoint myGeoPoint;

        public static LocationHelper getInstance(Context context) {
                if (instance == null) {
                        instance = new LocationHelper(context);
                }
                return instance;
        }

        public static double calculationByDistance(GeoPoint StartP, GeoPoint
EndP, double radius) {
                double lat1 = StartP.getLatitudeE6() / 1E6;
                double lat2 = EndP.getLatitudeE6() / 1E6;
                double lon1 = StartP.getLongitudeE6() / 1E6;
                double lon2 = EndP.getLongitudeE6() / 1E6;
                double dLat = Math.toRadians(lat2 - lat1);
                double dLon = Math.toRadians(lon2 - lon1);
                double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
Math.cos(Math.toRadians(lat1))
                                * Math.cos(Math.toRadians(lat2)) * 
Math.sin(dLon / 2) *
Math.sin(dLon / 2);
                double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
                return radius * c;
        }

        ...

}

The class which calls the LocationHelper uses this code, and this is
where the VerifyError is thrown:

LocationHelper helper = LocationHelper.getInstance(context);


Extract from the manifest file:

<uses-library
        android:name="com.google.android.maps" />

<uses-sdk
        android:minSdkVersion="3"
        android:targetSdkVersion="4" />

Stack trace

03-12 04:28:09.295 I/ActivityManager(   67): Displayed activity
com.android.vending/.AssetInfoActivity: 405 ms
03-12 04:28:25.845 I/ActivityManager(   67): Start proc com.citc.alice
for broadcast com.citc.alice/.EventAlarmReceiver: pid=9508 uid=10051
gids={3003}
03-12 04:28:27.135 W/dalvikvm( 9508): VFY: unable to find class
referenced in signature (Lcom/google/android/maps/GeoPoint;)
03-12 04:28:27.135 W/dalvikvm( 9508): VFY: unable to find class
referenced in signature (Lcom/google/android/maps/GeoPoint;)
03-12 04:28:27.165 W/dalvikvm( 9508): VFY: unable to find class
referenced in signature (Lcom/google/android/maps/GeoPoint;)
03-12 04:28:27.165 E/dalvikvm( 9508): Could not find method
com.google.android.maps.GeoPoint.getLatitudeE6, referenced from method
com.citc.alice.util.LocationHelper.calculationByDistance
03-12 04:28:27.165 W/dalvikvm( 9508): VFY: unable to resolve virtual
method 1259: Lcom/google/android/maps/GeoPoint;.getLatitudeE6 ()I
03-12 04:28:27.165 W/dalvikvm( 9508): VFY:  rejecting opcode 0x6e at
0x0000
03-12 04:28:27.165 W/dalvikvm( 9508): VFY:  rejected Lcom/citc/alice/
util/LocationHelper;.calculationByDistance (Lcom/google/android/maps/
GeoPoint;Lcom/google/android/maps/GeoPoint;D)D
03-12 04:28:27.165 W/dalvikvm( 9508): Verifier rejected class Lcom/
citc/alice/util/LocationHelper;
03-12 04:28:27.175 D/AndroidRuntime( 9508): Shutting down VM
03-12 04:28:27.175 W/dalvikvm( 9508): threadid=3: thread exiting with
uncaught exception (group=0x4000fe70)
03-12 04:28:27.175 E/AndroidRuntime( 9508): Uncaught handler: thread
main exiting due to uncaught exception
03-12 04:28:27.225 E/AndroidRuntime( 9508): java.lang.VerifyError:
com.citc.alice.util.LocationHelper
03-12 04:28:27.225 E/AndroidRuntime( 9508): at
com.citc.alice.AliceApplication.onCreate(AliceApplication.java:20)
03-12 04:28:27.225 E/AndroidRuntime( 9508): at
android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:
1048)
03-12 04:28:27.225 E/AndroidRuntime( 9508): at
android.app.ActivityThread.handleBindApplication(ActivityThread.java:
3622)
03-12 04:28:27.225 E/AndroidRuntime( 9508): at
android.app.ActivityThread.access$2500(ActivityThread.java:112)
03-12 04:28:27.225 E/AndroidRuntime( 9508): at
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1729)
03-12 04:28:27.225 E/AndroidRuntime( 9508): at
android.os.Handler.dispatchMessage(Handler.java:99)
03-12 04:28:27.225 E/AndroidRuntime( 9508): at
android.os.Looper.loop(Looper.java:123)
03-12 04:28:27.225 E/AndroidRuntime( 9508): at
android.app.ActivityThread.main(ActivityThread.java:3948)
03-12 04:28:27.225 E/AndroidRuntime( 9508): at
java.lang.reflect.Method.invokeNative(Native Method)
03-12 04:28:27.225 E/AndroidRuntime( 9508): at
java.lang.reflect.Method.invoke(Method.java:521)
03-12 04:28:27.225 E/AndroidRuntime( 9508): at
com.android.internal.os.ZygoteInit
$MethodAndArgsCaller.run(ZygoteInit.java:782)
03-12 04:28:27.225 E/AndroidRuntime( 9508): at
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
03-12 04:28:27.225 E/AndroidRuntime( 9508): at
dalvik.system.NativeStart.main(Native Method)


I thought it might be just not compatible with API 3 (1.5) but then
why does it work most of the time and then sometimes complain about
the class?

If someone can help I would really appreciate it! This one has really
got me stumped..

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to