在膨胀布局时尝试NPE(尝试在空对象引用上调用虚方法'boolean java.lang.String.equals(java.lang.Object)'

时间:2015-12-14 03:29:19

标签: android nullpointerexception layout-inflater android-inflate inflate-exception

当我尝试在活动中使用java.lang.NullPointerException时,我不断获得ScrollView

奇怪的是,我在其他活动中使用了完全相同的Scrollview设置。突然之间,我遇到了错误。我试过清理项目并重建。

我已经尝试过这个好老的重启程序。我今天学到了很多关于Null Pointer Exceptions的知识,但是我无法弄清楚为什么我会继续渲染问题

这是XML上抛出的java.lang.NullPointerException

java.lang.NullPointerException
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:738)
    at android.view.BridgeInflater.createViewFromTag(BridgeInflater.java:149)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
    at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:835)
    at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:70)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:811)
    at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798)
    at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:838)
    at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:70)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:811)
    at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798)
    at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:838)
    at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:70)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:811)
    at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:394)
    at com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:223)
    at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:426)
    at com.android.ide.common.rendering.LayoutLibrary.createSession(LayoutLibrary.java:350)
    at com.android.tools.idea.rendering.RenderTask$2.compute(RenderTask.java:510)
    at com.android.tools.idea.rendering.RenderTask$2.compute(RenderTask.java:498)
    at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:888)
    at com.android.tools.idea.rendering.RenderTask.createRenderSession(RenderTask.java:498)
    at com.android.tools.idea.rendering.RenderTask.access$600(RenderTask.java:72)
    at com.android.tools.idea.rendering.RenderTask$3.call(RenderTask.java:610)
    at com.android.tools.idea.rendering.RenderTask$3.call(RenderTask.java:607)
    at com.android.tools.idea.rendering.RenderService.runRenderAction(RenderService.java:362)
    at com.android.tools.idea.rendering.RenderTask.render(RenderTask.java:607)
    at com.android.tools.idea.rendering.RenderTask.render(RenderTask.java:629)
    at org.jetbrains.android.uipreview.AndroidLayoutPreviewToolWindowManager.doRender(AndroidLayoutPreviewToolWindowManager.java:652)
    at org.jetbrains.android.uipreview.AndroidLayoutPreviewToolWindowManager.access$1700(AndroidLayoutPreviewToolWindowManager.java:80)
    at org.jetbrains.android.uipreview.AndroidLayoutPreviewToolWindowManager$7$1.run(AndroidLayoutPreviewToolWindowManager.java:594)
    at com.intellij.openapi.progress.impl.CoreProgressManager$2.run(CoreProgressManager.java:152)
    at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:452)
    at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:402)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:54)
    at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:137)
    at org.jetbrains.android.uipreview.AndroidLayoutPreviewToolWindowManager$7.run(AndroidLayoutPreviewToolWindowManager.java:589)
    at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:320)
    at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:310)
    at com.intellij.util.ui.update.MergingUpdateQueue$2.run(MergingUpdateQueue.java:254)
    at com.intellij.util.ui.update.MergingUpdateQueue.flush(MergingUpdateQueue.java:269)
    at com.intellij.util.ui.update.MergingUpdateQueue.flush(MergingUpdateQueue.java:227)
    at com.intellij.util.ui.update.MergingUpdateQueue.run(MergingUpdateQueue.java:217)
    at com.intellij.util.concurrency.QueueProcessor.runSafely(QueueProcessor.java:238)
    at com.intellij.util.Alarm$Request$1.run(Alarm.java:351)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

所以,这些都不是我写的代码。所以我潜入堆栈跟踪并找到了这个:

  java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
        at android.app.ActivityThread.access$800(ActivityThread.java:151)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5254)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
        Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
              at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:715)
              at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
              at android.view.LayoutInflater.rInflate(LayoutInflater.java:809)
              at android.view.LayoutInflater.rInflate(LayoutInflater.java:809)
              at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
              at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
              at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
              at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:378)
              at android.app.Activity.setContentView(Activity.java:2145)
              at com.mitchellpalermo.tutroubleshooting.ContactPage.onCreate(ContactPage.java:11)
              at android.app.Activity.performCreate(Activity.java:5990)
              at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
              at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
              at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
              at android.app.ActivityThread.access$800(ActivityThread.java:151) 
              at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
              at android.os.Handler.dispatchMessage(Handler.java:102) 
              at android.os.Looper.loop(Looper.java:135) 
              at android.app.ActivityThread.main(ActivityThread.java:5254) 
              at java.lang.reflect.Method.invoke(Native Method) 
              at java.lang.reflect.Method.invoke(Method.java:372) 
              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

Contact.java 文件中指向 第11行 。看起来像这样(我把指标放在第11行):

  package com.mitchellpalermo.tutroubleshooting;

  import android.app.Activity;
  import android.os.Bundle;

  public class Contact extends Activity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_contact); // line 11
        }
  }

我认为 第11行 没有问题。

现在,我无法弄清楚我的代码有什么问题。在渲染问题NullPointerExceptions之间,我无法弄清楚我的代码究竟出了什么问题。

这是ScrollView不会引发任何错误的活动中 XML 的示例:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    tools:context="com.mitchellpalermo.tutroubleshooting.ComputerOrProjector">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:orientation="vertical">

        <TextView
            style="@style/HeaderStyle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="@string/solutions"
            android:textStyle="bold" />

        <!-- A CardView that contains a TextView -->
        <android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_margin="15dp"
            card_view:cardBackgroundColor="#FFFFFF"
            card_view:cardCornerRadius="4dp"
            card_view:cardElevation="5dp">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical">

                <TextView
                    style="@style/Solution"
                    android:text="@string/pc_v_fifth" />

                <View
                    android:layout_width="match_parent"
                    android:layout_height="2dp"
                    android:background="@android:color/darker_gray" />

                <TextView
                    style="@style/Solution"
                    android:text="@string/pc_v_first" />

                <View
                    android:layout_width="match_parent"
                    android:layout_height="2dp"
                    android:background="@android:color/darker_gray" />

                <TextView
                    style="@style/Solution"
                    android:text="@string/pc_v_second" />

                <View
                    android:layout_width="match_parent"
                    android:layout_height="2dp"
                    android:background="@android:color/darker_gray" />

                <TextView
                    style="@style/Solution"
                    android:text="@string/pc_v_third" />

                <View
                    android:layout_width="match_parent"
                    android:layout_height="2dp"
                    android:background="@android:color/darker_gray" />


                <TextView
                    style="@style/Solution"
                    android:text="@string/pc_v_fourth" />

                <View
                    android:layout_width="match_parent"
                    android:layout_height="2dp"
                    android:background="@android:color/darker_gray" />

            </LinearLayout>
        </android.support.v7.widget.CardView>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <Button
                style="@style/NextButton"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:onClick="sendEmail"
                android:text="@string/fixed"
                android:textStyle="bold" />

            <Button
                style="@style/NextButton"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:onClick="notFixedButton"
                android:text="@string/not_fixed"
                android:textStyle="bold" />

        </LinearLayout>

    </LinearLayout>

</ScrollView>

以下是我收到错误的活动

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:fillViewport="false">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <TextView
            style="@style/HeaderStyle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="@string/still_not_fixed" />

        <!-- A CardView that contains a TextView -->
        <android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_margin="15dp"
            card_view:cardBackgroundColor="#FFFFFF"
            card_view:cardCornerRadius="4dp"
            card_view:cardElevation="5dp">

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="@string/hector" />

            <view
                android:layout_width="match_parent"
                android:layout_height="2dp"
                android:backgroundTint="@android:color/darker_gray" />

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="@string/robert" />

            <view
                android:layout_width="match_parent"
                android:layout_height="2dp"
                android:backgroundTint="@android:color/darker_gray" />

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="@string/mitch" />

        </android.support.v7.widget.CardView>

    </LinearLayout>

</ScrollView>

有什么建议吗?非常感谢你!

2 个答案:

答案 0 :(得分:168)

if(isset($_GET['note']) && !empty($_GET['note'])) { $my_id = $_SESSION['user_id']; echo $note_id=$_GET['note']; echo $edit_note = $_GET['edit']; } if (mysql_query("UPDATE `notes` SET `text`='$edit_note',`Note_added_dat`= now() WHERE `note_id` ='$note_id' AND `user_id` = '$my_id'")) { { echo 'Note has been Edited'; } } 更改为<view,因为<View视图无关。这是通过view attr定义的自定义视图,如下所示:

class

你有

<view
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    class="com.your.package.YourCustomView" />

因为Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference 尝试解析LayoutInflater attr:

class源代码

LayoutInflater
  • 在第724行,它会检查您的代码是否为//... View createViewFromTag(View parent, String name, Context context, AttributeSet attrs, boolean ignoreThemeAttr) { if (name.equals("view")) { // line 724 name = attrs.getAttributeValue(null, "class"); // line 725 } // Apply a theme wrapper, if allowed and one is specified. if (!ignoreThemeAttr) { final TypedArray ta = context.obtainStyledAttributes(attrs, ATTRS_THEME); final int themeResId = ta.getResourceId(0, 0); if (themeResId != 0) { context = new ContextThemeWrapper(context, themeResId); } ta.recycle(); } if (name.equals(TAG_1995)) { // line 738 // Let's party like it's 1995! return new BlinkLayout(context, attrs); } //... 并获得view
  • 在第725行,它尝试通过true attr上课并获取class
  • 在第738行,它会尝试检查null代码并崩溃

此外,有一个奇怪的事情,Android开发者添加了复活节彩蛋,你可以尝试一下:

blink

答案 1 :(得分:24)

2天后我解决了这个问题,使用查看代替查看

<View
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:background="#faf4f4"></View>