首页 > 解决方案 > 应用程序崩溃而没有明确指出其来源

问题描述

该应用程序崩溃并记录以下转储:

Message: Cannot set 'scaleX' to Float.NaN
Java.Interop.JniEnvironment+InstanceMethods.CallNonvirtualVoidMethod (Java.Interop.JniObjectReference instance, Java.Interop.JniObjectReference type, Java.Interop.JniMethodInfo method, Java.Interop.JniArgumentValue* args) [0x0008e] in <58e6b6e8a7914acd9424d6f6da5bca31>
Java.Interop.JniPeerMembers+JniInstanceMethods.InvokeVirtualVoidMethod (System.String encodedMember, Java.Interop.IJavaPeerable self, Java.Interop.JniArgumentValue* parameters) [0x0005d] in <58e6b6e8a7914acd9424d6f6da5bca31>
Android.Views.View.set_ScaleX (System.Single value) [0x00022] in <947f416de12142bb922b5c54b8f841f0>
Xamarin.Forms.Platform.Android.VisualElementTracker.UpdateScale () [0x00025] in <9e919e3d32554840a213a0a951bd96a0>
Xamarin.Forms.Platform.Android.VisualElementTracker.HandlePropertyChanged (System.Object sender, System.ComponentModel.PropertyChangedEventArgs e) [0x002d9] in <9e919e3d32554840a213a0a951bd96a0>
Xamarin.Forms.Platform.Android.VisualElementTracker.HandleRedrawNeeded (System.Object sender, Xamarin.Forms.Internals.EventArg`1[T] e) [0x0001d] in <9e919e3d32554840a213a0a951bd96a0>
(wrapper delegate-invoke) System.EventHandler`1[Xamarin.Forms.Internals.EventArg`1[Xamarin.Forms.VisualElement]].invoke_void_object_TEventArgs(object,Xamarin.Forms.Internals.EventArg`1<Xamarin.Forms.VisualElement>)
Xamarin.Forms.VisualElement.BatchCommit () [0x0002e] in <34017a75c85c45aa9f9e020189ac2ac1>
Xamarin.Forms.AnimationExtensions.HandleTweenerUpdated (System.Object o, System.EventArgs args) [0x0004f] in <34017a75c85c45aa9f9e020189ac2ac1>
Xamarin.Forms.Tweener.<Start>b__22_0 (System.Int64 step) [0x00056] in <34017a75c85c45aa9f9e020189ac2ac1>
Xamarin.Forms.Internals.Ticker.SendSignals (System.Int64 step) [0x0003c] in <34017a75c85c45aa9f9e020189ac2ac1>
Xamarin.Forms.Internals.Ticker.SendSignals (System.Int32 timestep) [0x00014] in <34017a75c85c45aa9f9e020189ac2ac1>
Xamarin.Forms.Platform.Android.AndroidTicker.OnValOnUpdate (System.Object sender, Android.Animation.ValueAnimator+AnimatorUpdateEventArgs e) [0x00000] in <9e919e3d32554840a213a0a951bd96a0>
Android.Animation.ValueAnimator+IAnimatorUpdateListenerImplementor.OnAnimationUpdate (Android.Animation.ValueAnimator animation) [0x00017] in <947f416de12142bb922b5c54b8f841f0>
Android.Animation.ValueAnimator+IAnimatorUpdateListenerInvoker.n_OnAnimationUpdate_Landroid_animation_ValueAnimator_ (System.IntPtr jnienv, System.IntPtr native__this, System.IntPtr native_animation) [0x0000f] in <947f416de12142bb922b5c54b8f841f0>
(wrapper dynamic-method) Android.Runtime.DynamicMethodNameCounter.121(intptr,intptr,intptr)
--- End of managed Java.Lang.IllegalArgumentException stack trace ---
java.lang.IllegalArgumentException: Cannot set 'scaleX' to Float.NaN
android.view.View.sanitizeFloatPropertyValue in View.java:17108
android.view.View.sanitizeFloatPropertyValue in View.java:17082
android.view.View.setScaleX in View.java:16435
mono.android.animation.ValueAnimator_AnimatorUpdateListenerImplementor.n_onAnimationUpdate(Native Method)
mono.android.animation.ValueAnimator_AnimatorUpdateListenerImplementor.onAnimationUpdate in ValueAnimator_AnimatorUpdateListenerImplementor.java:30
android.animation.ValueAnimator.animateValue in ValueAnimator.java:1558
android.animation.ValueAnimator.animateBasedOnTime in ValueAnimator.java:1349
android.animation.ValueAnimator.doAnimationFrame in ValueAnimator.java:1481
android.animation.AnimationHandler.doAnimationFrame in AnimationHandler.java:146
android.animation.AnimationHandler.access$100 in AnimationHandler.java:37
android.animation.AnimationHandler$1.doFrame in AnimationHandler.java:54
android.view.Choreographer$CallbackRecord.run in Choreographer.java:965
android.view.Choreographer.doCallbacks in Choreographer.java:791
android.view.Choreographer.doFrame in Choreographer.java:722
android.view.Choreographer$FrameDisplayEventReceiver.run in Choreographer.java:952
android.os.Handler.handleCallback in Handler.java:883
android.os.Handler.dispatchMessage in Handler.java:100
android.os.Looper.loop in Looper.java:214
android.app.ActivityThread.main in ActivityThread.java:7356
java.lang.reflect.Method.invoke(Native Method)
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run in RuntimeInit.java:492
com.android.internal.os.ZygoteInit.main in ZygoteInit.java:930

这种情况没有明确的重复。

如果有人有关于这个例外的信息,我很想听听。

我在应用程序中使用 scaleX 的唯一地方是同步融合 SfBorder:

xmlns:border="clr-namespace:Syncfusion.XForms.Border;assembly=Syncfusion.Core.XForms"

<border:SfBorder x:Name="DummySearchBox"
                         BorderWidth="0"
                         CornerRadius="5"
                         HasShadow="True"
                         InputTransparent="False"
                         ShadowColor="{StaticResource SilverSemiTransparent}"
                         HorizontalOptions="Fill"
                         VerticalOptions="Start"
                         TranslationX="30"
                         TranslationY="24"
                         ScaleX="1"
                         Margin="0,0,60,0">

我在后面的代码中更改了它的 ScaleX:

private async Task EnterFocusMode()
    {
        await Device.InvokeOnMainThreadAsync(async () =>
        {
            DummySearchBox.ScaleX = 1;
            await Task.WhenAll(
                DummySearchBox.TranslateTo(0, 0, 500),
                DummySearchBox.ScaleXTo(1.2, 500),
                DummySearchBox.FadeTo(0, 200)
            );
            DummySearchBox.InputTransparent = true;
        });
    }

    private async Task ExitFocusMode()
    {
        await Device.InvokeOnMainThreadAsync(async () =>
        {
            DummySearchBox.ScaleX = 1.2;
            await Task.WhenAll(
                DummySearchBox.FadeTo(1, 200),
                DummySearchBox.TranslateTo(30, 24, 500),
                DummySearchBox.ScaleXTo(1, 500)
            );
            DummySearchBox.InputTransparent = false;
            DummySearchBox.Focus();
        });
    }

    public void Dispose()
    {
        Device.BeginInvokeOnMainThread(() =>
        {
            DummySearchBox.Opacity = 1;
            DummySearchBox.TranslationX = 30;
            DummySearchBox.TranslationY = 24;
            DummySearchBox.ScaleX = 1;
            DummySearchBox.InputTransparent = false;
        });
    }

有人熟悉这种例外或情况吗?

标签: androidxamarin.forms

解决方案


演示

您的代码在我的开发环境中运行良好。Xamarin Forms (4.8.0) 和 Syncfusion 核心和 Sfborder (18.4.0.30) - 设备 iPhone 11 模拟器 (14.3) 和 Android Pie 9.0 API 28。

你能回复我你的开发环境吗?您的 Syncfusion 版本是多少?


推荐阅读