0

Chaque fois que j'attribue un attribut android: onClick à un AutoCompleteTextView, mon application se bloque immédiatement lors du chargement de l'activité. J'ai testé AutoCompleteTextView sans affecter une méthode onClick et cela semble fonctionner correctement, tout comme l'affectation d'onClick à d'autres vues (y compris EditText, Spinners, TextViews, Boutons et ImageButtons). J'ai réussi à réduire l'erreur à spécifiquement à la ligne 24 (setContentView (R.layout.activity_main)). Quelqu'un peut-il nous éclairer là-dessus?Pourquoi attribuer un OnClickListener à AutoCompleteTextView donnant une exception NullPointerException?

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

Copie possible de [Qu'est-ce qu'une exception NullPointerException et comment la réparer?] (Https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix -it) –

+2

Note pour fermer les électeurs: Ce n'est pas un NPE dans le code OP mais dans le code de la plateforme. – laalto

Répondre

0

Cette l ressemble à être un bug dans AutoCompleteTextView.

Qu'est-ce qui se passe:

  1. Gonflage XML invoque le constructeur AutoCompleteTextView, et il invoque le constructeur View. Le constructeur voit l'attribut onClick et appelle setOnClickListener().
  2. AutoCompleteTextView a remplacé setOnClickListener() qui écrit dans un champ interne mPassThroughClickListener. Il est seulement initialisé à la fin du constructeur AutoCompleteTextView, et ce code init n'a pas encore été exécuté.

Reference

Pour contourner le problème, retirez le onClick attrtibute de votre XML et appelez setOnClickListener() programme dans votre code.

J'ai déposé un bug à ce sujet dans Android tracker.

+0

merci pour le dépôt et le dépôt de bogues. Lorsque j'ai testé un setOnClickListener par programme dans mon TestApp, il s'est exécuté sans problème. Je vais éditer ma question en conséquence. – beige