2017-12-15 4 views
0

Ich bin vor ein Problem mit Syncfusion Charts (Com.Syncfusion.Charts) in einem Android Project. Ich verwende BottomNavigationView und lade Inhalte in Fragmente.Xamarin.Android Syncfusion Charts innerhalb Fragmente Laden: Notwendigkeit begrenzt Rect

Dieses spezifische Fragment hat 6 Ansichten mit 2 Ansichten nebeneinander angeordnet, 4 von ihnen mit Diagrammen und die anderen haben Textansichten.

Das Fragment wird normalerweise (manchmal) geladen. Aber es stürzt ab, wenn ich durch andere Fragmente oder Aktivitäten navigiere und zum Diagrammfragment zurückkehre.

[MonoDroid] UNHANDLED EXCEPTION: 
[MonoDroid] Java.Lang.NullPointerException: need bounds Rect 
[MonoDroid] at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() [0x0000c] in <896ad1d315ca4ba7b117efb8dacaedcf>:0 
[MonoDroid] at Java.Interop.JniEnvironment+InstanceMethods.CallVoidMethod (Java.Interop.JniObjectReference instance, Java.Interop.JniMethodInfo method, Java.Interop.JniArgumentValue* args) [0x00069] in <e499a5498b1b48379b88fe5ed629079f>:0 
[MonoDroid] at Java.Interop.JniPeerMembers+JniInstanceMethods.InvokeVirtualVoidMethod (System.String encodedMember, Java.Interop.IJavaPeerable self, Java.Interop.JniArgumentValue* parameters) [0x0002a] in <e499a5498b1b48379b88fe5ed629079f>:0 
[MonoDroid] at Android.Graphics.Paint.GetTextBounds (System.String text, System.Int32 start, System.Int32 end, Android.Graphics.Rect bounds) [0x00079] in <85286732fd894fbbba95d2215e5f9ec6>:0 
[MonoDroid] at Com.Syncfusion.Charts.ChartLabelStyle.measureLabel (System.String label, Android.Graphics.Rect labelRect, Android.Graphics.Paint paintText, System.Single leftMargin, System.Single topMargin, System.Single rightMargin, System.Single bottomMargin) [0x00027] in <a9b0cef031b54405bf316434aa63799b>:0 
[MonoDroid] at Com.Syncfusion.Charts.ChartLabelStyle.MeasureLabel (System.String label) [0x0003e] in <a9b0cef031b54405bf316434aa63799b>:0 
[MonoDroid] at Com.Syncfusion.Charts.XyDataSeries.CalculateDataMarkerLabelPoint (Com.Syncfusion.Charts.DataMarkerLabel dataMarkerLabel, System.Drawing.PointF labelPoint, Com.Syncfusion.Charts.ChartDataMarkerLabelStyle labelStyle, System.Boolean isDrawLine) [0x00011] in <a9b0cef031b54405bf316434aa63799b>:0 
[MonoDroid] at Com.Syncfusion.Charts.XyDataSeries.CreateDataMarkerLabels() [0x00198] in <a9b0cef031b54405bf316434aa63799b>:0 
[MonoDroid] at Com.Syncfusion.Charts.ChartBase.UpdateArea() [0x00131] in <a9b0cef031b54405bf316434aa63799b>:0 
[MonoDroid] at Com.Syncfusion.Charts.ChartBase.OnMeasureChart() [0x00031] in <a9b0cef031b54405bf316434aa63799b>:0 
[MonoDroid] at Com.Syncfusion.Charts.SfChart.OnMeasure (System.Int32 widthMeasureSpec, System.Int32 heightMeasureSpec) [0x0003e] in <a9b0cef031b54405bf316434aa63799b>:0 
[MonoDroid] at Android.Views.View.n_OnMeasure_II (System.IntPtr jnienv, System.IntPtr native__this, System.Int32 widthMeasureSpec, System.Int32 heightMeasureSpec) [0x00008] in <85286732fd894fbbba95d2215e5f9ec6>:0 
[MonoDroid] at (wrapper dynamic-method) System.Object:a6e2f256-5633-444e-9d6a-06be6e391800 (intptr,intptr,int,int) 
[MonoDroid] --- End of managed Java.Lang.NullPointerException stack trace --- 
[MonoDroid] java.lang.NullPointerException: need bounds Rect 
[MonoDroid]  at android.graphics.Paint.getTextBounds(Paint.java:2192) 
[MonoDroid]  at md51e14154f795d24977fc65ef53030a808.SfChart.n_onMeasure(Native Method) 
[MonoDroid]  at md51e14154f795d24977fc65ef53030a808.SfChart.onMeasure(SfChart.java:53) 
[MonoDroid]  at android.view.View.measure(View.java:17430) 
[MonoDroid]  at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:727) 
[MonoDroid]  at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:463) 
[MonoDroid]  at android.view.View.measure(View.java:17430) 
[MonoDroid]  at android.widget.LinearLayout.measureVertical(LinearLayout.java:875) 
[MonoDroid]  at android.widget.LinearLayout.onMeasure(LinearLayout.java:613) 
[MonoDroid]  at android.view.View.measure(View.java:17430) 
[MonoDroid]  at android.widget.RelativeLayout.measureChild(RelativeLayout.java:697) 
[MonoDroid]  at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:481) 
[MonoDroid]  at android.view.View.measure(View.java:17430) 
[MonoDroid]  at android.widget.ScrollView.measureChildWithMargins(ScrollView.java:1260) 
[MonoDroid]  at android.widget.FrameLayout.onMeasure(FrameLayout.java:430) 
[MonoDroid]  at android.widget.ScrollView.onMeasure(ScrollView.java:337) 
[MonoDroid]  at android.view.View.measure(View.java:17430) 
[MonoDroid]  at android.widget.RelativeLayout.measureChild(RelativeLayout.java:697) 
[MonoDroid]  at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:481) 
[MonoDroid]  at android.view.View.measure(View.java:17430) 
[MonoDroid]  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) 
[MonoDroid]  at android.widget.FrameLayout.onMeasure(FrameLayout.java:430) 
[MonoDroid]  at android.view.View.measure(View.java:17430) 
[MonoDroid]  at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:727) 
[MonoDroid]  at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:463) 
[MonoDroid]  at android.view.View.measure(View.java:17430) 
[MonoDroid]  at android.widget.RelativeLayout.measureChild(RelativeLayout.java:697) 
[MonoDroid]  at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:481) 
[MonoDroid]  at android.view.View.measure(View.java:17430) 
[MonoDroid]  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) 
[MonoDroid]  at android.widget.FrameLayout.onMeasure(FrameLayout.java:430) 
[MonoDroid]  at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:139) 
[MonoDroid]  at android.view.View.measure(View.java:17430) 
[MonoDroid]  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) 
[MonoDroid]  at android.support.v7.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:393) 
[MonoDroid]  at android.view.View.measure(View.java:17430) 
[MonoDroid]  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) 
[MonoDroid]  at android.widget.FrameLayout.onMeasure(FrameLayout.java:430) 
[MonoDroid]  at android.view.View.measure(View.java:17430) 
[MonoDroid]  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) 
[MonoDroid]  at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436) 
[MonoDroid]  at android.widget.LinearLayout.measureVertical(LinearLayout.java:722) 
[MonoDroid]  at android.widget.LinearLayout.onMeasure(LinearLayout.java:613) 
[MonoDroid]  at android.view.View.measure(View.java:17430) 
[MonoDroid]  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) 
[MonoDroid]  at android.widget.FrameLayout.onMeasure(FrameLayout.java:430) 
[MonoDroid]  at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2560) 
[MonoDroid]  at android.view.View.measure(View.java:17430) 
[MonoDroid]  at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2001) 
[MonoDroid]  at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1166) 
[MonoDroid]  at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1372) 
[MonoDroid]  at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1054) 
[MonoDroid]  at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5779) 
[MonoDroid]  at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767) 
[MonoDroid]  at android.view.Choreographer.doCallbacks(Choreographer.java:580) 
[MonoDroid]  at android.view.Choreographer.doFrame(Choreographer.java:550) 
[MonoDroid]  at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753) 
[MonoDroid]  at android.os.Handler.handleCallback(Handler.java:739) 
[MonoDroid]  at android.os.Handler.dispatchMessage(Handler.java:95) 
[MonoDroid]  at android.os.Looper.loop(Looper.java:135) 
[MonoDroid]  at android.app.ActivityThread.main(ActivityThread.java:5221) 
[MonoDroid]  at java.lang.reflect.Method.invoke(Native Method) 
[MonoDroid]  at java.lang.reflect.Method.invoke(Method.java:372) 
[MonoDroid]  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
[MonoDroid]  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
+0

Ich mache einige Tests und tatsächlich denke ich, ist die Grafik Insertion in einem RelativeLayout. Also wurde es ohne RelativeLayout-Eigenschaften eingefügt. Ich habe begonnen, die Logik für die Verwendung von LinearLayout anstelle von RelativeLayout zu ändern. Morgen sollte ich eine endgültige Meinung dazu haben. –

+0

Haben Sie Ihr Problem gelöst? –

+0

@ YorkShen-MSFT Nein:/Es ist etwas falsch mit Syncfusion Charts, wenn Labels oder Legenden aktiviert sind. SFCHarts kann manchmal die Größe dieser Eigenschaften nicht berechnen und die App nicht abstürzen. Also habe ich ein Layout eingefügt, um eine Legende manuell zu implementieren. –

Antwort

0

[gelöst]

Der Absturz, weil parallel Layoutverarbeitung wirft. Also, das Problem trat schließlich auf. Wir haben etwas überarbeitet und das Fragment nur für das Laden der Graphen verantwortlich gemacht.

1. Async-Daten: Wir haben die gesamte Kommunikation mit der API in eine Aktivität verschoben, bevor wir mit den Fragmenten arbeiten.

2. Datenverarbeitung: Nachdem wir die Daten von der API erhalten haben, verarbeiten wir die Datenmodelle und speichern die Diagramme für die zukünftige Verwendung mit Singleton-Mustern.