【问题标题】:Why my app crashes , error message java.lang.IllegalStateException:为什么我的应用程序崩溃,错误消息 java.lang.IllegalStateException:
【发布时间】:2019-03-15 10:16:59
【问题描述】:

有些用户有一定的错误,但我真的不明白错误信息,开发者控制台给了我。我可以查看代码中出现错误的位置吗(例如包、行等)。

这个错误很少出现,所以我有点困惑,因为我无法在我的设备上重现问题。

错误信息:

java.lang.IllegalStateException: 
at android.widget.RelativeLayout$DependencyGraph.getSortedViews 
(RelativeLayout.java:1786)
at android.widget.RelativeLayout.sortChildren (RelativeLayout.java:381)
at android.widget.RelativeLayout.onMeasure (RelativeLayout.java:389)
at android.view.View.measure (View.java:23297)
at android.widget.ScrollView.measureChildWithMargins (ScrollView.java:2226)
at android.widget.FrameLayout.onMeasure (FrameLayout.java:185)
at android.widget.ScrollView.onMeasure (ScrollView.java:566)
at android.view.View.measure (View.java:23297)
at android.widget.RelativeLayout.measureChildHorizontal 
(RelativeLayout.java:715)
at android.widget.RelativeLayout.onMeasure (RelativeLayout.java:461)
at android.view.View.measure (View.java:23297)
at android.support.v4.widget.DrawerLayout.onMeasure (DrawerLayout.java:1059)
at android.view.View.measure (View.java:23297)
at android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:6928)
at android.widget.FrameLayout.onMeasure (FrameLayout.java:185)
at android.view.View.measure (View.java:23297)
at android.support.v4.widget.DrawerLayout.onMeasure (DrawerLayout.java:1059)
at android.view.View.measure (View.java:23297)
at android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:6928)
at android.widget.FrameLayout.onMeasure (FrameLayout.java:185)
at android.support.v7.widget.ContentFrameLayout.onMeasure 
(ContentFrameLayout.java:141)
at android.view.View.measure (View.java:23297)
at android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:6928)
at android.widget.LinearLayout.measureChildBeforeLayout 
(LinearLayout.java:1514)
at android.widget.LinearLayout.measureVertical (LinearLayout.java:806)
at android.widget.LinearLayout.onMeasure (LinearLayout.java:685)
at android.view.View.measure (View.java:23297)
at android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:6928)
at android.widget.FrameLayout.onMeasure (FrameLayout.java:185)
at android.view.View.measure (View.java:23297)
at android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:6928)
at android.widget.LinearLayout.measureChildBeforeLayout 
(LinearLayout.java:1514)
at android.widget.LinearLayout.measureVertical (LinearLayout.java:806)
at android.widget.LinearLayout.onMeasure (LinearLayout.java:685)
at android.view.View.measure (View.java:23297)
at android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:6928)
at android.widget.FrameLayout.onMeasure (FrameLayout.java:185)
at com.android.internal.policy.DecorView.onMeasure (DecorView.java:899)
at android.view.View.measure (View.java:23297)
at android.view.ViewRootImpl.performMeasure (ViewRootImpl.java:2881)
at android.view.ViewRootImpl.measureHierarchy (ViewRootImpl.java:1911)
at android.view.ViewRootImpl.performTraversals (ViewRootImpl.java:2166)
at android.view.ViewRootImpl.doTraversal (ViewRootImpl.java:1780)
at android.view.ViewRootImpl$TraversalRunnable.run (ViewRootImpl.java:7827)
at android.view.Choreographer$CallbackRecord.run (Choreographer.java:911)
at android.view.Choreographer.doCallbacks (Choreographer.java:723)
at android.view.Choreographer.doFrame (Choreographer.java:658)
at android.view.Choreographer$FrameDisplayEventReceiver.run 
(Choreographer.java:897)
at android.os.Handler.handleCallback (Handler.java:789)
at android.os.Handler.dispatchMessage (Handler.java:98)
at android.os.Looper.loop (Looper.java:164)
at android.app.ActivityThread.main (ActivityThread.java:6944)
at java.lang.reflect.Method.invoke (Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run (Zygote.java:327)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1374)

也许有人可以为我提供解决该问题的方法。

谢谢

【问题讨论】:

  • 显示你的布局

标签: android developer-console


【解决方案1】:

基于Relative Layout的source code,你有循环依赖。除非我们看到您的 xml 代码以及您以编程方式添加视图的任何地方,否则无法提供更多帮助

     /**
     * Builds a sorted list of views. The sorting order depends on the dependencies
     * between the view. For instance, if view C needs view A to be processed first
     * and view A needs view B to be processed first, the dependency graph
     * is: B -> A -> C. The sorted array will contain views B, A and C in this order.
     *
     * @param sorted The sorted list of views. The length of this array must
     *        be equal to getChildCount().
     * @param rules The list of rules to take into account.
     */
    void getSortedViews(View[] sorted, int... rules) {
        final ArrayDeque<Node> roots = findRoots(rules);
        int index = 0;

        Node node;
        while ((node = roots.pollLast()) != null) {
            final View view = node.view;
            final int key = view.getId();

            sorted[index++] = view;

            final ArrayMap<Node, DependencyGraph> dependents = node.dependents;
            final int count = dependents.size();
            for (int i = 0; i < count; i++) {
                final Node dependent = dependents.keyAt(i);
                final SparseArray<Node> dependencies = dependent.dependencies;

                dependencies.remove(key);
                if (dependencies.size() == 0) {
                    roots.add(dependent);
                }
            }
        }

        if (index < sorted.length) {
            throw new IllegalStateException("Circular dependencies cannot exist"
                    + " in RelativeLayout");
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-28
    • 1970-01-01
    • 2021-11-27
    相关资源
    最近更新 更多