[mono-android] ClassNotFoundException with ItemClick event

Fabrice faze1224 at gmail.com
Fri Mar 25 10:21:11 EDT 2011


I've set up the log as requested:

        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            //Set the Activity's view to our list layout		
            SetContentView(Resource.Layout.DeviceList);

            var server = new MockServer();
            var listView = this.FindViewById<ListView>(Resource.Id.listView);
            listView.Adapter = new DeviceAdapter(this,
Resource.Layout.OnOffDevice, server.GetDevices());

            //Wire up the click event
            try
            {
                listView.ItemClick += new
EventHandler<ItemEventArgs>(showToast);
            }
            catch (Java.Lang.Throwable e)
            {
                *Android.Util.Log.Error("no!", e, "this is the
java-side exception.");*
                Toast.MakeText(this, "Error reported", ToastLength.Long).Show();
            }
        }

Problem:
Visual Studio correctly stop on the error when adding the handler. To be
more detailed, it stop 2x:

-  Instance    {Java.Lang.ClassNotFoundException: Exception of type
'Java.Lang.ClassNotFoundException' was thrown.
  at Android.Runtime.JNIEnv.CallObjectMethod (IntPtr jobject, IntPtr
jmethod, Android.Runtime.JValue[] parms) [0x00024] in
/home/jpobst/Desktop/mondroid/Mono.Android/src/Runtime/JNIEnv.cs:328
  at Android.Runtime.JNIEnv.FindClass (System.String classname) [0x00032] in
/home/jpobst/Desktop/mondroid/Mono.Android/src/Runtime/JNIEnv.cs:155 }
Java.Lang.ClassNotFoundException

 - Instance    {Java.Lang.NoClassDefFoundError: Exception of type
'Java.Lang.NoClassDefFoundError' was thrown.
  at Android.Runtime.JNIEnv.FindClass (System.String classname) [0x00066] in
/home/jpobst/Desktop/mondroid/Mono.Android/src/Runtime/JNIEnv.cs:159
  at Android.Runtime.JNIEnv.FindClass (System.Type type) [0x00000] in
/home/jpobst/Desktop/mondroid/Mono.Android/src/Runtime/JNIEnv.cs:126 }
Java.Lang.NoClassDefFoundError

But I don't know why, it completely stop executing code: the catch is not
executed (no log, no Toast)
I also tested without the debugger (only on the device), same behaviour...
I also tested using a "catch(Exception exc)" to be more generic, same
behaviour: the catch code is not executed

adb logcat (activity name is "HoMIDroid.DeviceActivity") doesn't show any
error:

I/monodroid(21979): Activating instance of type HoMIDroid.DeviceActivity
I/monodroid(21979): signature
D/dalvikvm(21465): GC_EXPLICIT freed 119 objects / 10144 bytes in 76m
I/BatteryStatsImpl(   96): notePhoneSignalStrengthLocked: 3->4
D/SurfaceFlinger(   96): Layer::requestBuffer(this=0x91c6d8), index=1,
pid=21979, w=480, h=800 success
D/SurfaceFlinger(   96): Layer::requestBuffer(this=0x91c6d8), index=0,
pid=21979, w=480, h=800 success
D/SurfaceFlinger(   96): Layer::requestBuffer(this=0x91c6d8), index=1,
pid=21979, w=480, h=800 success
D/dalvikvm(21473): GC_EXPLICIT freed 491 objects / 25424 bytes in 65ms
D/PowerManagerService(   96): New lightsensor value:90, lcdValue:160
D/PowerManagerService(   96): New lightsensor value:40, lcdValue:160
W/KeyCharacterMap(21979): Bad keycharmap - filesize=32
W/KeyCharacterMap(21979): Error loading keycharmap file
'/system/usr/keychars/bravo-keypad.kcm.bin'.
hw.keyboards.0.devname='bravo-keypad'
W/KeyCharacterMap(21979): Using default keymap:
/system/usr/keychars/qwerty.kcm.bin
D/Sensors (   96): close_akm, fd=170
D/SurfaceFlinger(   96): Layer::setBuffers(this=0x9d0a88), pid=211, w=480,
h=800
D/SurfaceFlinger(   96): Layer::setBuffers(this=0x9d0a88), pid=211, w=480,
h=800
D/SurfaceFlinger(   96): Layer::requestBuffer(this=0x9d0a88), index=0,
pid=211, w=480, h=800 success
D/SurfaceFlinger(   96): Layer::requestBuffer(this=0x9d0a88), index=1,
pid=211, w=480, h=800 success
D/AK8973  (   72): Compass CLOSE
V/AlarmManager(   96): Adding Alarm{46982c80 type 0 com.htc.launcher} mars
26 12:00:00 matin
D/PowerManagerService(   96): New lightsensor value:90, lcdValue:160
I/BatteryStatsImpl(   96): notePhoneSignalStrengthLocked: 4->3
I/BatteryStatsImpl(   96): notePhoneSignalStrengthLocked: 3->4
D/dalvikvm(21481): GC_EXPLICIT freed 6522 objects / 356664 bytes in 94ms



Thank you for your help
Fabrice



On Fri, Mar 25, 2011 at 2:27 PM, Jonathan Pryor <jpryor at novell.com> wrote:

> On Mar 25, 2011, at 5:27 AM, Faze Faze wrote:
> > I'm new to monodroid (and new to android dev) and I'm facing a problem
> when binding the ItemClick event.
> ...
> >
> >         protected override void OnCreate(Bundle bundle)
> >         {
> ...
> >             //Wire up the click event
>         try {
> >             listView.ItemClick += new
> EventHandler<ItemEventArgs>(showToast);
>
>         } catch (Java.Lang.Throwable e) {
>                Android.Util.Log.Error("no!", e, "this is the java-side
> exception.");
>         }
>
> > Do you have any idea on where the problem is ?
>
> No, because we don't know what the Java-side message and stack trace are.
> (Fortunately, the next release will -- finally! -- include the Java side
> exception information when you call Java.Lang.Throwable.ToString()...)
>
> The above code wraps the call in a try/catch block, then uses Log.Error()
> to print the error message on the Android error log. You can then use `adb
> logcat` to view the Java-side exception message, which will either provide
> you enough information to figure out what's wrong, or provide us enough
> information to investigate further. :-)
>
>  - Jon
>
> _______________________________________________
> Monodroid mailing list
> Monodroid at lists.ximian.com
>
> UNSUBSCRIBE INFORMATION:
> http://lists.ximian.com/mailman/listinfo/monodroid
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.ximian.com/mailman/private/monodroid/attachments/20110325/8fd0e851/attachment-0001.html 


More information about the Monodroid mailing list