0

Immer, wenn ich einer AutoCompleteTextView ein android: onClick-Attribut zuweise, stürzt meine Anwendung beim Laden der Aktivität sofort ab. Ich habe AutoCompleteTextView getestet, ohne eine onClick-Methode zuzuordnen, und es scheint zu funktionieren, genauso wie das Zuweisen von onClick zu anderen Ansichten (einschließlich EditText, Spinner, TextViews, Buttons und ImageButtons). Es ist mir gelungen, den Fehler auf Zeile 24 (setContentView (R.layout.activity_main)) einzugrenzen. Kann jemand etwas Licht dazu bringen?Warum wird AutoCompleteTextView ein OnClickListener zugewiesen, der eine NullPointerException gibt?

MainActivity.java

package com.example.matt.testapp; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.ArrayAdapter; 
import android.widget.AutoCompleteTextView; 

public class MainActivity extends AppCompatActivity { 
    public AutoCompleteTextView actv; 
    public String[] continents = {"North America", 
      "South America", 
      "Antarctica", 
      "Europe", 
      "Africa", 
      "Asia", 
      "Australia" 
    }; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     actv = (AutoCompleteTextView) findViewById(R.id.actv); 
     ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, continents); 
     actv.setAdapter(adapter); 
    } 

    public void actvClick (View view) {} 
} 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_height="match_parent" 
    android:layout_width="match_parent" > 

    <AutoCompleteTextView 
     android:id="@+id/actv" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:onClick="actvClick" > 
    </AutoCompleteTextView> 
</LinearLayout> 

Logcat

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.matt.testapp/com.example.matt.testapp.MainActivity}: android.view.InflateException: Binary XML file line #7: Binary XML file line #7: Error inflating class AutoCompleteTextView 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892) 
at android.app.ActivityThread.-wrap11(Unknown Source:0) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593) 
at android.os.Handler.dispatchMessage(Handler.java:105) 
at android.os.Looper.loop(Looper.java:164) 
at android.app.ActivityThread.main(ActivityThread.java:6541) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 
Caused by: android.view.InflateException: Binary XML file line #7: Binary XML file line #7: Error inflating class AutoCompleteTextView 
Caused by: android.view.InflateException: Binary XML file line #7: Error inflating class AutoCompleteTextView 
Caused by: java.lang.NullPointerException: Attempt to write to field 'android.view.View$OnClickListener android.widget.AutoCompleteTextView$PassThroughClickListener.mWrapped' on a null object reference 
at android.widget.AutoCompleteTextView$PassThroughClickListener.-set0(Unknown Source:0) 
at android.widget.AutoCompleteTextView.setOnClickListener(AutoCompleteTextView.java:307) 
at android.view.View.<init>(View.java:5008) 
at android.widget.TextView.<init>(TextView.java:824) 
at android.widget.EditText.<init>(EditText.java:88) 
at android.widget.AutoCompleteTextView.<init>(AutoCompleteTextView.java:220) 
at android.widget.AutoCompleteTextView.<init>(AutoCompleteTextView.java:193) 
at android.widget.AutoCompleteTextView.<init>(AutoCompleteTextView.java:172) 
at android.support.v7.widget.AppCompatAutoCompleteTextView.<init>(AppCompatAutoCompleteTextView.java:68) 
at android.support.v7.widget.AppCompatAutoCompleteTextView.<init>(AppCompatAutoCompleteTextView.java:64) 
at android.support.v7.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:130) 
at android.support.v7.app.AppCompatDelegateImplV9.createView(AppCompatDelegateImplV9.java:1026) 
at android.support.v7.app.AppCompatDelegateImplV9.onCreateView(AppCompatDelegateImplV9.java:1083) 
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:772) 
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:863) 
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:515) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:423) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:374) 
at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:289) 
at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139) 
at com.example.matt.testapp.MainActivity.onCreate(MainActivity.java:24) 
at android.app.Activity.performCreate(Activity.java:6975) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892) 
at android.app.ActivityThread.-wrap11(Unknown Source:0) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593) 
at android.os.Handler.dispatchMessage(Handler.java:105) 
at android.os.Looper.loop(Looper.java:164) 
at android.app.ActivityThread.main(ActivityThread.java:6541) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 
+2

Mögliche Duplikate von [Was ist eine NullPointerException und wie behebe ich sie?] (Https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix -it) –

+2

Hinweis zum Schließen der Wähler: Dies ist keine NPE im OP-Code, sondern im Plattformcode. – laalto

Antwort

0

Dies l ooks mag ein Bug in AutoCompleteTextView sein.

Was geschieht:

  1. aufpumpen XML ruft AutoCompleteTextView Konstruktor, und es ruft View Konstruktor.
  2. View Konstruktor sieht das onClick Attribut und ruft setOnClickListener().
  3. AutoCompleteTextView hat setOnClickListener() überschrieben, die in ein internes mPassThroughClickListener Feld schreibt. Es wird nur am Ende von AutoCompleteTextView Konstruktor initialisiert, und dieser Init-Code wurde noch nicht ausgeführt.

Reference

um es zu umgehen, entfernen Sie die onClick attrtibute aus Ihrem XML und rufen setOnClickListener() programmatisch in Ihrem Code.

Ich habe eine bug darüber in Android Issue Tracker abgelegt.

+0

danke für die Rundown und Bug-Einreichung. Wenn ich einen setOnClickListener programmgesteuert in meiner TestApp getestet habe, lief es ohne Probleme. Ich werde meine Frage entsprechend bearbeiten. – beige

Verwandte Themen