如何找到适用于Android设备的正确来源?

合作

我想浏览android来源以了解错误原因。我有与android设备version 4.4.4相同的android设备API 19我下载了API级别19的资源(通过sdk管理器),并希望找到导致错误的代码。
在logcat中,我有错误:

12-16 16:51:03.790: E/AndroidRuntime(10349): java.lang.NullPointerException
12-16 16:51:03.790: E/AndroidRuntime(10349):    at android.widget.TextView.checkForRelayout(TextView.java:6596)
12-16 16:51:03.790: E/AndroidRuntime(10349):    at android.widget.TextView.onRtlPropertiesChanged(TextView.java:8716)
12-16 16:51:03.790: E/AndroidRuntime(10349):    at android.view.View.resolvePadding(View.java:12538)

但是问题是TextView类内的第6596行是:

} else {

8716行是注释。因此,cources并不对应于错误。如何找到正确的来源?

另外,请检查设备Build.VERSION.SDK_INT is 19设备- Sony Xperia tablet

完整日志12-16 17:30:43

.401: E/AndroidRuntime(19327): java.lang.NullPointerException
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.widget.TextView.checkForRelayout(TextView.java:6596)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.widget.TextView.onRtlPropertiesChanged(TextView.java:8716)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.view.View.resolvePadding(View.java:12538)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.view.View.resolveRtlPropertiesIfNeeded(View.java:12289)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.view.View.measure(View.java:16639)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at com.cooperok.gui.views.tablefixheader.TableFixHeaders.makeView(TableFixHeaders.java:741)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at com.cooperok.gui.views.tablefixheader.TableFixHeaders.makeAndSetup(TableFixHeaders.java:698)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at com.cooperok.gui.views.tablefixheader.TableFixHeaders.onLayout(TableFixHeaders.java:601)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.view.View.layout(View.java:14965)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.view.ViewGroup.layout(ViewGroup.java:4631)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.view.View.layout(View.java:14965)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.view.ViewGroup.layout(ViewGroup.java:4631)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.view.View.layout(View.java:14965)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.view.ViewGroup.layout(ViewGroup.java:4631)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.view.View.layout(View.java:14965)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.view.ViewGroup.layout(ViewGroup.java:4631)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.view.View.layout(View.java:14965)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.view.ViewGroup.layout(ViewGroup.java:4631)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.view.View.layout(View.java:14965)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.view.ViewGroup.layout(ViewGroup.java:4631)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.view.View.layout(View.java:14965)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.view.ViewGroup.layout(ViewGroup.java:4631)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.view.View.layout(View.java:14965)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.view.ViewGroup.layout(ViewGroup.java:4631)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1987)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1744)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5622)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.view.Choreographer.doCallbacks(Choreographer.java:574)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.view.Choreographer.doFrame(Choreographer.java:544)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.os.Handler.handleCallback(Handler.java:733)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.os.Handler.dispatchMessage(Handler.java:95)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.os.Looper.loop(Looper.java:212)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at android.app.ActivityThread.main(ActivityThread.java:5135)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at java.lang.reflect.Method.invokeNative(Native Method)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at java.lang.reflect.Method.invoke(Method.java:515)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
12-16 17:30:43.401: E/AndroidRuntime(19327):    at dalvik.system.NativeStart.main(Native Method)
合作

为了解决我的问题,我查看了原始的android源代码,发现NullPointerException只有两个可能的变体,因此很容易猜出问题出在哪里

/**
 * Check whether entirely new text requires a new view layout
 * or merely a new text layout.
 */
private void checkForRelayout() {
    // If we have a fixed width, we can just swap in a new text layout
    // if the text height stays the same or if the view height is fixed.

    if ((mLayoutParams.width != LayoutParams.WRAP_CONTENT ||
            (mMaxWidthMode == mMinWidthMode && mMaxWidth == mMinWidth)) &&
            (mHint == null || mHintLayout != null) &&
            (mRight - mLeft - getCompoundPaddingLeft() - getCompoundPaddingRight() > 0)) {
        // Static width, so try making a new text layout.

        int oldht = mLayout.getHeight();
        int want = mLayout.getWidth();
        int hintWant = mHintLayout == null ? 0 : mHintLayout.getWidth();

        /*
         * No need to bring the text into view, since the size is not
         * changing (unless we do the requestLayout(), in which case it
         * will happen at measure).
         */
        makeNewLayout(want, hintWant, UNKNOWN_BORING, UNKNOWN_BORING,
                      mRight - mLeft - getCompoundPaddingLeft() - getCompoundPaddingRight(),
                      false);

        if (mEllipsize != TextUtils.TruncateAt.MARQUEE) {
            // In a fixed-height view, so use our new text layout.
            if (mLayoutParams.height != LayoutParams.WRAP_CONTENT &&
                mLayoutParams.height != LayoutParams.MATCH_PARENT) {
                invalidate();
                return;
            }

            // Dynamic height, but height has stayed the same,
            // so use our new text layout.
            if (mLayout.getHeight() == oldht &&
                (mHintLayout == null || mHintLayout.getHeight() == oldht)) {
                invalidate();
                return;
            }
        }

        // We lose: the height has changed and we have a dynamic height.
        // Request a new view layout using our new text layout.
        requestLayout();
        invalidate();
    } else {
        // Dynamic width, so we have no choice but to request a new
        // view layout with a new text layout.
        nullLayouts();
        requestLayout();
        invalidate();
    }
}

在我的情况下,TextView是通过编程方式创建的,而mLayoutParams为null,因此可以通过将LayoutParams设置为view来解决问题。
但是供应商可以更改android源并且不显示这些更改,这一点太糟糕了(实际上我没有找到有关Sony的任何信息)。我以为他们只更改内核。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Android Browser.BOOKMARKS_URI不适用于所有设备。如何找到给定设备的正确uri?

来自分类Dev

适用于Android的PushSharp设备ID

来自分类Dev

如何使Gaia的更改适用于设备

来自分类Dev

如何使用适用于 iOS 的 BLE 识别通过蓝牙找到的设备

来自分类Dev

如何制作适用于移动设备和平板电脑的自适应Android应用程序?

来自分类Dev

适用于Android的附近连接API-不适用于某些设备

来自分类Dev

Android 设备的 autoGrantPermissions 适用于 Windows、Linux,但不适用于 OSX

来自分类Dev

CountDownTimer 适用于 Android Studio,不适用于设备

来自分类Dev

Android Studio-未找到适用于Android的应用

来自分类Dev

适用于多种设备的Android通用启动画面

来自分类Dev

CSS媒体查询不适用于Android设备

来自分类Dev

适用于Android的Mini TV无法识别为设备

来自分类Dev

适用于经典AND BTLE设备的Android蓝牙扫描

来自分类Dev

Ubuntu上适用于Android设备的最佳软件?

来自分类Dev

适用于多种设备的Android通用启动画面

来自分类Dev

按键不适用于某些Android设备

来自分类Dev

Android适用于不同设备的常规缩放

来自分类Dev

字体家族样式不适用于android设备吗?

来自分类Dev

Ubuntu上适用于Android设备的最佳软件?

来自分类Dev

如何找到适用于Python 2.7的较早版本的pip?

来自分类Dev

如何找到适用于 Python 2.7 的旧版 pip?

来自分类Dev

如何找到适用于 Python 2.7 的旧版 pip?

来自分类Dev

适用于Android的流行自定义视图-有任何好的来源吗?

来自分类Dev

适用于Android的Crosswalk浏览器抛出“仅允许安全来源”错误

来自分类Dev

仅适用于移动设备的轮播

来自分类Dev

电影设备适用于Ubuntu吗?

来自分类Dev

使ui适用于各种iOS设备

来自分类Dev

LocalStorage 不适用于移动设备?

来自分类Dev

Dragula 不适用于触摸设备

Related 相关文章

  1. 1

    Android Browser.BOOKMARKS_URI不适用于所有设备。如何找到给定设备的正确uri?

  2. 2

    适用于Android的PushSharp设备ID

  3. 3

    如何使Gaia的更改适用于设备

  4. 4

    如何使用适用于 iOS 的 BLE 识别通过蓝牙找到的设备

  5. 5

    如何制作适用于移动设备和平板电脑的自适应Android应用程序?

  6. 6

    适用于Android的附近连接API-不适用于某些设备

  7. 7

    Android 设备的 autoGrantPermissions 适用于 Windows、Linux,但不适用于 OSX

  8. 8

    CountDownTimer 适用于 Android Studio,不适用于设备

  9. 9

    Android Studio-未找到适用于Android的应用

  10. 10

    适用于多种设备的Android通用启动画面

  11. 11

    CSS媒体查询不适用于Android设备

  12. 12

    适用于Android的Mini TV无法识别为设备

  13. 13

    适用于经典AND BTLE设备的Android蓝牙扫描

  14. 14

    Ubuntu上适用于Android设备的最佳软件?

  15. 15

    适用于多种设备的Android通用启动画面

  16. 16

    按键不适用于某些Android设备

  17. 17

    Android适用于不同设备的常规缩放

  18. 18

    字体家族样式不适用于android设备吗?

  19. 19

    Ubuntu上适用于Android设备的最佳软件?

  20. 20

    如何找到适用于Python 2.7的较早版本的pip?

  21. 21

    如何找到适用于 Python 2.7 的旧版 pip?

  22. 22

    如何找到适用于 Python 2.7 的旧版 pip?

  23. 23

    适用于Android的流行自定义视图-有任何好的来源吗?

  24. 24

    适用于Android的Crosswalk浏览器抛出“仅允许安全来源”错误

  25. 25

    仅适用于移动设备的轮播

  26. 26

    电影设备适用于Ubuntu吗?

  27. 27

    使ui适用于各种iOS设备

  28. 28

    LocalStorage 不适用于移动设备?

  29. 29

    Dragula 不适用于触摸设备

热门标签

归档