37

Ich bekomme immer eine java.lang.NullPointerException, wenn ich versuche, ScrollView in einer Aktivität zu verwenden .NPE beim Aufblasen des Layouts (Versuch, die virtuelle Methode 'boolean java.lang.String.equals (java.lang.Object)' auf einer Nullobjekt-Referenz aufzurufen)

Die seltsame Sache ist, dass ich die gleiche Scrollview Setup in anderen Aktivitäten verwendet habe. Und plötzlich bekomme ich Fehler. Ich habe versucht, das Projekt zu säubern und neu aufzubauen.

Und ich habe versucht, das gute alte Programm neu zu starten. Ich habe heute viel über Null-Zeiger-Ausnahmen gelernt, aber ich konnte nicht herausfinden, warum ich immer Rendering-Probleme bekomme.

Dies ist die java.lang.NullPointerException, die auf dem XML geworfen wird:

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) 

Also, nichts davon ist Code, den ich geschrieben habe. So tauchte ich in den Stack-Trace und fand diese:

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) 

die auf Linie Punkte 11 auf der Contact.java Datei. Die wie folgt aussieht (ich habe setzen Indikatoren um Zeile 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 
     } 
    } 

Ich habe kein Problem mit Linie 11 sehen.

Jetzt kann ich nicht herausfinden, was mit meinem Code falsch ist. Zwischen Rendering Probleme und NullPointerExceptions kann ich nicht herausfinden, was eigentlich falsch mit meinem Code ist.

Dies ist ein Beispiel für XML in einer Aktivität in dem die ScrollView keine Fehler werfen:

<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> 

Und hier ist die Aktivität, in dem ich eine Fehlermeldung erhalten:

<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> 

Irgendwelche Vorschläge? Und vielen Dank im Voraus!

+0

Irgendwo im Code ruft 'String.equals' mit einem Null-String. –

+1

Dies ist kein Standard-NPE, wie es bei einem System-Inflate-Vorgang der Fall ist. Ich habe daher die Frage erneut gestellt, da es sich nicht um ein Duplikat der gegebenen Frage handelt. Es ist eine gültige und hilfreiche Frage mit einer hilfreichen Antwort. – Kuffs

+0

Überprüfen Sie die Lösung: https://readyandroid.wordpress.com/android-view-inflateexception-binary-xml-file-line-0-attempt-to-invoke-virtual-method-boolean-javal-lang-string- equalsjava-lang-object-on-a-null-objekt-reference-android/und viele mehr https://readyandroid.wordpress.com/ –

Antwort

114

ändern <view zu <View, weil view nicht über leer Ansicht ist.Es ist für benutzerdefinierte Ansicht definiert durch class attr, wie unten:

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

Und hast du

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference 

wegen LayoutInflater versucht class attr zu analysieren:

LayoutInflater Quellcode

//... 
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); 
    } 
//... 
  • On line 724 es überprüfen, ob Ihr Tag view ist und bekommt true
  • On line 725 es Klasse durch class attr und null
  • On line 738 für blink Tag und bekommt zu überprüfen versucht wird zu bekommen versucht Absturz

Außerdem gibt es eine seltsame Sache, Android-Entwickler Osterei hinzugefügt haben, können Sie es versuchen:

<view 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    class="blink"> 
    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:text="Some text" /> 
</view> 
+0

Vielen Dank, Igor! Ich bin mir nicht sicher, wie ich es vermisst habe, dass ich den

+0

Danke manh .. slvd mein Problem ..was für Stunden zu kämpfen – Beenal

+0

Awesome Antwort mit so detaillierte Erklärung + Bonus. Danke Mann –

14

Nach 2 Tagen löste ich dieses Problem Ansicht statt Ansicht verwenden

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