Notice (2018-05-24): bugzilla.xamarin.com is now in
Please join us on
Visual Studio Developer Community and in the
Mono organizations on
GitHub to continue tracking issues. Bugzilla will remain
available for reference in read-only mode. We will continue to work
on open Bugzilla bugs, copy them to the new locations
as needed for follow-up, and add the new items under Related
Our sincere thanks to everyone who has contributed on this bug
tracker over the years. Thanks also for your understanding as we
make these adjustments and improvements for the future.
Please create a new report on
Developer Community or GitHub with
your current version information, steps to reproduce, and relevant error
messages or log files if you are hitting an issue that looks similar to
this resolved bug and you do not yet see a matching new report.
If a method in a AIDL-specified interface contains a byte argument, a NullPointerException is thrown.
The OnTransact() method in the generated stub initializes the buffer to null, instead of allocating it before calling Parcel.ReadByteArray. Seems to be wrongly using the same rule used for other data types.
This issue was previously reported in the forum: http://forums.xamarin.com/discussion/47305/nullpointerexception-when-transferring-byte-array-over-ipc-using-aidl
Our C# port of AIDL is missing call to Create[Byte_or_anything]Array() to create an assignable array. Now we got an internal fix, and it will be included in the next major update. Thanks for the report.
It's been 7 months and still no fix on latest stable version.
I'm using Xamarin for Android 22.214.171.124 and still have to fix the stub by hand.
Looks like I already had the fix but it doesn't work... :(
The latest version (Xamarin.Android 126.96.36.199) generates the following code:
byte  arg0 = default (byte );
arg0 = data.CreateByteArray (); data.ReadByteArray (arg0);
and then I get: Java.Lang.RuntimeException: bad array length
If I replace the generated code again by:
byte arg0 = data.CreateByteArray();
The documentation for CreateByteArray() states: Read and return a byte object from the parcel.
So the ReadByteArray() call is unnecessary.
I got another fix for that: https://github.com/xamarin/xamarin-android/pull/151
The fix has landed. [master 13820dc]