Skip to content
This repository has been archived by the owner on May 5, 2021. It is now read-only.

In android when trying to open signature pad again, and click on ok it throughs ObjectDisposedException #176

Open
divyesh008 opened this issue Nov 22, 2019 · 4 comments

Comments

@divyesh008
Copy link

divyesh008 commented Nov 22, 2019

Description

Signature pad throughs ObjectDisposedException exception while try to capture signature again without clearing the pad, if you clear the pad before capturing signature than it will work fine. Problem is only in Android in iOS it works fine.

Code

private async void OkClick(object sender, EventArgs e)
{
        try
        {
            if (!padView.IsBlank)
            {
                
                Stream img = await padView.GetImageStreamAsync(SignaturePad.Forms.SignatureImageFormat.Png);//.GetImage(ImageFormatType.Png);
                ImageSource imgSource = ImageSource.FromStream(() => img);

                var memoryStream = new MemoryStream();
                long pos = Device.RuntimePlatform == Device.Android ? 0 : img.Position;

                img.CopyTo(memoryStream);
                byte[] imageArray = memoryStream.ToArray();

                ProfileViewModel.SignatureBase64 = Convert.ToBase64String(imageArray);
                DigitalSignaturePageViewModel.SignatureBase64 = Convert.ToBase64String(imageArray);
                img.Position = pos;

                GetSignature.Invoke(this, imgSource);
                closePopUp();
            }
            
        }
        catch (ObjectDisposedException ex)
        {
            Console.Write(ex.StackTrace);
        }
        catch(Exception ex)
        {
            Debug.WriteLine(ex.Message);
        }
}

Expected Behavior

it must capture the signature if signed else just close the pad.

Actual Behavior

Throughs ObjectDisposedException with this message:
Cannot access a disposed object.
Object name: 'Xamarin.Controls.SignaturePadCanvasView'.

Stack trace:

at Java.Interop.JniPeerMembers.AssertSelf (Java.Interop.IJavaPeerable self) [0x00029] in <1effe20f448e48b697e82c3d8c9f59bb>:0
at Java.Interop.JniPeerMembers+JniInstanceMethods.InvokeNonvirtualInt32Method (System.String encodedMember, Java.Interop.IJavaPeerable self, Java.Interop.JniArgumentValue* parameters) [0x00000] in <1effe20f448e48b697e82c3d8c9f59bb>:0
at Android.Views.View.get_Width () [0x0000a] in :0
at Xamarin.Controls.Extensions.GetSize (Android.Views.View view) [0x00000] in <0c0873655a504a1796935fa2cfa62e06>:0
at Xamarin.Controls.SignaturePadCanvasView.GetImageConstructionArguments (Xamarin.Controls.ImageConstructionSettings settings, System.Drawing.SizeF& scale, System.Drawing.RectangleF& signatureBounds, System.Drawing.SizeF& imageSize, System.Single& strokeWidth, Android.Graphics.Color& strokeColor, Android.Graphics.Color& backgroundColor) [0x00084] in <0c0873655a504a1796935fa2cfa62e06>:0
at Xamarin.Controls.SignaturePadCanvasView.GetImageStreamAsync (Xamarin.Controls.SignatureImageFormat format, Xamarin.Controls.ImageConstructionSettings settings) [0x00000] in <0c0873655a504a1796935fa2cfa62e06>:0
at SignaturePad.Forms.SignaturePadCanvasRenderer.OnImageStreamRequested (System.Object sender, SignaturePad.Forms.SignaturePadCanvasView+ImageStreamRequestedEventArgs e) [0x00142] in :0
at (wrapper delegate-invoke) System.EventHandler`1[SignaturePad.Forms.SignaturePadCanvasView+ImageStreamRequestedEventArgs].invoke_void_object_TEventArgs(object,SignaturePad.Forms.SignaturePadCanvasView/ImageStreamRequestedEventArgs)
at SignaturePad.Forms.SignaturePadCanvasView.GetImageStreamAsync (SignaturePad.Forms.SignatureImageFormat imageFormat, SignaturePad.Forms.ImageConstructionSettings settings) [0x00012] in :0
at SignaturePad.Forms.SignaturePadCanvasView.GetImageStreamAsync (SignaturePad.Forms.SignatureImageFormat format, System.Boolean shouldCrop, System.Boolean keepAspectRatio) [0x0002f] in :0
at SignaturePad.Forms.SignaturePadView.GetImageStreamAsync (SignaturePad.Forms.SignatureImageFormat format, System.Boolean shouldCrop, System.Boolean keepAspectRatio) [0x00006] in :0
at Fracational.Views.Popups.SignaturePadPopView.OkClick (System.Object sender, System.EventArgs e) [0x0003e] in /Users/mac/Documents/Divyesh/Projects/Latest_Fracational/Fracational/Views/PopUps/SignaturePadPopView.xaml.cs:79

@bsohi
Copy link

bsohi commented Feb 9, 2020

i am seeing this issue in version 3.0.
Cannot access a disposed object.
Object name: 'Xamarin.Controls.SignaturePadCanvasView'.

Steps to produce

scribble signature on signature pad
navigate to other page
navigates back to the page where signature control is
signature control is empty and when I sign it crashes with above exception.
(there is no error if we clear the control first)
Event method where error occurred
async void SignaturePad_StrokeCompleted(object sender, System.EventArgs e)
{
var signedImageStream = await SignaturePad.GetImageStreamAsync(SignatureImageFormat.Png);

    var memoryStream = new System.IO.MemoryStream();
    signedImageStream.CopyTo(memoryStream);
    byte[] bytes = memoryStream.ToArray();

   var fileContentBase64String = System.Convert.ToBase64String(bytes);
}

Please advise.
Thx
Balwinder

@fazil1979
Copy link

fazil1979 commented Jun 23, 2020 via email

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants
@bsohi @fazil1979 @divyesh008 and others