Note that there are some explanatory texts on larger screens.

plurals
  1. PONoClassDefError android.security.MessageDigest Error
    text
    copied!<p>Im following tutorials online in order to track currnet location. This is the code. Ive looked through lots of replies on this site yet i cant get it working. </p> <p>main.xml</p> <pre><code> &lt;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=".MainActivity" &gt; &lt;fragment android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" class="com.google.android.gms.maps.MapFragment" /&gt; &lt;/RelativeLayout&gt; </code></pre> <p>android manifest.xml</p> <pre><code> &lt;manifest xmlns:android="http://schemas.android.com/apk/res/android" package="in.wptrafficanalyzer.locationingooglemap" android:versionCode="1" android:versionName="1.0" &gt; &lt;uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15" /&gt; &lt;uses-permission android:name="android.permission.INTERNET" /&gt; &lt;uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/&gt; &lt;application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" &gt; &lt;uses-library android:name="com.google.android.maps" /&gt; &lt;activity android:name=".MainActivity" android:label="@string/title_activity_main" &gt; &lt;intent-filter&gt; &lt;action android:name="android.intent.action.MAIN" /&gt; &lt;category android:name="android.intent.category.LAUNCHER" /&gt; &lt;/intent-filter&gt; &lt;/activity&gt; &lt;/application&gt; &lt;/manifest&gt; </code></pre> <p>currentlocationoverlay.java</p> <pre><code> package in.wptrafficanalyzer.locationingooglemap; import java.util.ArrayList; import android.graphics.drawable.Drawable; import android.util.Log; import com.google.android.maps.ItemizedOverlay; import com.google.android.maps.OverlayItem; public class CurrentLocationOverlay extends ItemizedOverlay&lt;OverlayItem&gt; { private ArrayList&lt;OverlayItem&gt; mOverlays = new ArrayList&lt;OverlayItem&gt;(); public CurrentLocationOverlay(Drawable defaultMarker) { super(boundCenterBottom(defaultMarker)); } // Executed, when populate() method is called @Override protected OverlayItem createItem(int arg0) { return mOverlays.get(arg0); } @Override public int size() { return mOverlays.size(); } public void addOverlay(OverlayItem overlay){ mOverlays.add(overlay); populate(); // Calls the method createItem() } @Override protected boolean onTap(int arg0) { Log.d("Tapped", mOverlays.get(arg0).getSnippet()); return true; } } </code></pre> <p>mainactivity.java</p> <pre><code> package in.wptrafficanalyzer.locationingooglemap; import java.util.List; import android.graphics.drawable.Drawable; import android.location.Criteria; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.view.Menu; import android.widget.TextView; import com.google.android.maps.GeoPoint; import com.google.android.maps.MapActivity; import com.google.android.maps.MapController; import com.google.android.maps.MapView; import com.google.android.maps.Overlay; import com.google.android.maps.OverlayItem; public class MainActivity extends MapActivity implements LocationListener { private MapView mapView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Getting reference to MapView mapView = (MapView) findViewById(R.id.map); // Setting Zoom Controls on MapView mapView.setBuiltInZoomControls(true); // Getting LocationManager object from System Service LOCATION_SERVICE LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); // Creating a criteria object to retrieve provider Criteria criteria = new Criteria(); // Getting the name of the best provider String provider = locationManager.getBestProvider(criteria, true); // Getting Current Location Location location = locationManager.getLastKnownLocation(provider); if(location!=null){ onLocationChanged(location); } locationManager.requestLocationUpdates(provider, 20000, 0, this); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } @Override protected boolean isRouteDisplayed() { // TODO Auto-generated method stub return false; } @Override public void onLocationChanged(Location location) { TextView tvLocation = (TextView) findViewById(R.id.map); // Getting latitude double latitude = location.getLatitude(); // Getting longitude double longitude = location.getLongitude(); // Setting latitude and longitude in the TextView tv_location tvLocation.setText("Latitude:" + latitude + ", Longitude:"+ longitude ); // Creating an instance of GeoPoint corresponding to latitude and longitude GeoPoint point = new GeoPoint((int)(latitude * 1E6), (int)(longitude*1E6)); // Getting MapController MapController mapController = mapView.getController(); // Locating the Geographical point in the Map mapController.animateTo(point); // Applying a zoom mapController.setZoom(15); // Redraw the map mapView.invalidate(); // Getting list of overlays available in the map List&lt;Overlay&gt; mapOverlays = mapView.getOverlays(); // Creating a drawable object to represent the image of mark in the map Drawable drawable = this.getResources().getDrawable(R.drawable.cur_position); // Creating an instance of ItemizedOverlay to mark the current location in the map CurrentLocationOverlay currentLocationOverlay = new CurrentLocationOverlay(drawable); // Creating an item to represent a mark in the overlay OverlayItem currentLocation = new OverlayItem(point, "Current Location", "Latitude : " + latitude + ", Longitude:" + longitude); // Adding the mark to the overlay currentLocationOverlay.addOverlay(currentLocation); // Clear Existing overlays in the map mapOverlays.clear(); // Adding new overlay to map overlay mapOverlays.add(currentLocationOverlay); } @Override public void onProviderDisabled(String provider) { // TODO Auto-generated method stub } @Override public void onProviderEnabled(String provider) { // TODO Auto-generated method stub } @Override public void onStatusChanged(String provider, int status, Bundle extras) { // TODO Auto-generated method stub } } </code></pre> <p>This is my logcat log</p> <pre><code> 03-01 10:31:12.257: I/dalvikvm(18886): threadid=3: reacting to signal 3 03-01 10:31:12.267: I/dalvikvm(18886): Wrote stack traces to '/data/anr/traces.txt' 03-01 10:31:12.367: I/dalvikvm(18886): Could not find method android.security.MessageDigest.getInstance, referenced from method com.google.android.maps.KeyHelper.getSignatureFingerprint 03-01 10:31:12.367: W/dalvikvm(18886): VFY: unable to resolve static method 153: Landroid/security/MessageDigest;.getInstance (Ljava/lang/String;)Landroid/security/MessageDigest; 03-01 10:31:12.367: D/dalvikvm(18886): VFY: replacing opcode 0x71 at 0x0038 03-01 10:31:12.377: D/AndroidRuntime(18886): Shutting down VM 03-01 10:31:12.377: W/dalvikvm(18886): threadid=1: thread exiting with uncaught exception (group=0x40a2a1f8) 03-01 10:31:12.397: E/AndroidRuntime(18886): FATAL EXCEPTION: main 03-01 10:31:12.397: E/AndroidRuntime(18886): java.lang.NoClassDefFoundError: android.security.MessageDigest 03-01 10:31:12.397: E/AndroidRuntime(18886): at com.google.android.maps.KeyHelper.getSignatureFingerprint(KeyHelper.java:60) 03-01 10:31:12.397: E/AndroidRuntime(18886): at com.google.android.maps.MapActivity.createMap(MapActivity.java:552) 03-01 10:31:12.397: E/AndroidRuntime(18886): at com.google.android.maps.MapActivity.onCreate(MapActivity.java:422) 03-01 10:31:12.397: E/AndroidRuntime(18886): at in.wptrafficanalyzer.locationingooglemap.MainActivity.onCreate(MainActivity.java:26) 03-01 10:31:12.397: E/AndroidRuntime(18886): at android.app.Activity.performCreate(Activity.java:4492) 03-01 10:31:12.397: E/AndroidRuntime(18886): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 03-01 10:31:12.397: E/AndroidRuntime(18886): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 03-01 10:31:12.397: E/AndroidRuntime(18886): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 03-01 10:31:12.397: E/AndroidRuntime(18886): at android.app.ActivityThread.access$600(ActivityThread.java:123) 03-01 10:31:12.397: E/AndroidRuntime(18886): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 03-01 10:31:12.397: E/AndroidRuntime(18886): at android.os.Handler.dispatchMessage(Handler.java:99) 03-01 10:31:12.397: E/AndroidRuntime(18886): at android.os.Looper.loop(Looper.java:137) 03-01 10:31:12.397: E/AndroidRuntime(18886): at android.app.ActivityThread.main(ActivityThread.java:4424) 03-01 10:31:12.397: E/AndroidRuntime(18886): at java.lang.reflect.Method.invokeNative(Native Method) 03-01 10:31:12.397: E/AndroidRuntime(18886): at java.lang.reflect.Method.invoke(Method.java:511) 03-01 10:31:12.397: E/AndroidRuntime(18886): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 03-01 10:31:12.397: E/AndroidRuntime(18886): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 03-01 10:31:12.397: E/AndroidRuntime(18886): at dalvik.system.NativeStart.main(Native Method) 03-01 10:31:12.747: I/dalvikvm(18886): threadid=3: reacting to signal 3 03-01 10:31:12.757: I/dalvikvm(18886): Wrote stack traces to '/data/anr/traces.txt' 03-01 10:31:12.957: I/dalvikvm(18886): threadid=3: reacting to signal 3 03-01 10:31:12.967: I/dalvikvm(18886): Wrote stack traces to '/data/anr/traces.txt' 03-01 10:31:16.197: I/Process(18886): Sending signal. PID: 18886 SIG: 9 </code></pre> <p>Thanks in advance</p> <hr> <p>MessageDigest.java</p> <p>import java.security.NoSuchAlgorithmException;</p> <p>public class MessageDigest { private java.security.MessageDigest instance;</p> <pre><code>public MessageDigest() {} private MessageDigest(java.security.MessageDigest instance) { this.instance = instance; } public static MessageDigest getInstance(String algorithm) throws NoSuchAlgorithmException { if (algorithm == null) return null; try { if (algorithm.equals("SHA-1")) return (MessageDigest) Class.forName("android.security.Sha1MessageDigest").newInstance(); else if (algorithm.equals("MD5")) return (MessageDigest) Class.forName("android.security.Md5MessageDigest").newInstance(); } catch (Exception e) {} return new MessageDigest(java.security.MessageDigest.getInstance(algorithm)); } public void update(byte[] input) { instance.update(input); } public byte[] digest() { return instance.digest(); } public byte[] digest(byte[] input) { return instance.digest(input); } </code></pre> <p>}</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload