37

Я продолжаю получать java.lang.NullPointerException, когда я пытаюсь использовать ScrollView в действии ,NPE при раздувании макета (попытка вызвать виртуальный метод «boolean java.lang.String.equals (java.lang.Object)» на ссылке с нулевым объектом)

Странно, что я использовал ту же самую установку Scrollview в других видах деятельности. И вдруг я получаю ошибки. Я пробовал очистить проект и перестроить.

И я пробовал старый старый перезапуск программы. Сегодня я много узнал об исключениях Null Pointer, но я не смог понять, почему я продолжаю получать Проблемы с рендерингом.

Это java.lang.NullPointerException, что выбрасывается на XML:

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) 

Что указывает на линии 11 на Contact.java файл. Который выглядит следующим образом (я поместил индикаторы вокруг линии 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, я не могу понять, что на самом деле не так с моим кодом.

Это пример XML в деятельности, в которой ScrollView не бросает какие-либо ошибки:

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

Любые предложения? И спасибо вам заблаговременно!

+0

Где-то в вашем коде вызова 'String.equals' с пустой строкой. –

+1

Это не стандартный NPE, поскольку он находится в режиме раздувания системы. Поэтому я повторно открыл вопрос, поскольку это не дубликат данного вопроса. Это полезный и полезный вопрос с полезным ответом. – Kuffs

+0

Проверьте решение: https://readyandroid.wordpress.com/android-view-inflateexception-binary-xml-file-line-0-attempt-to-invoke-virtual-method-boolean-java-lang-string- equalsjava-lang-object-on-a-null-object-reference-android/и многие другие https://readyandroid.wordpress.com/ –

ответ

114

Изменения <view к <View, потому что view не о пустого вида.Это для настраиваемого представления определяется через class ATTR, как показано ниже:

<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 пытается разобрать class Attr:

LayoutInflater исходный код

//... 
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); 
    } 
//... 
  • В строке 724 это проверить, что ваш тег view и получает true
  • В строке 725 он пытается получить класс через class ATTR и получает null
  • В строке 738 он пытается проверить blink тега и получает аварию

Кроме того, есть любопытная вещь, Android разработчики добавили пасхальное яйцо, вы можете попробовать:

<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

Большое вам спасибо, Игорь! Я не уверен, как я пропустил, что я не заглаждал «Просмотр открывателя». –

+0

Спасибо manh .. slvd моя проблема .. боролась за часы – Beenal

+0

Удивительный ответ с таким подробным объяснением + бонус. Спасибо man –

14

Через 2 дня я решил эту проблему с помощью View вместо вид

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