2015-09-30 1 views
2

J'ai cherché sur le problème que j'ai, mais il est très spécifique et je n'ai pas pu trouver la réponse pour cela.Android findViewById retournant null après avoir changé compileSdkVersion et buildToolsVersion

J'ai le code suivant dans mon application:

class MainActivity extends Activity { 
    ... 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     ... 
     mStatusImageView = (ImageView) findViewById(R.id.imageViewStatus); 
     ... 
     mStatusImageView.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       ... 
      } 
    ... 
    } 

Au départ, je Compilé et en utilisant APK exporté:

compileSdkVersion 21 
buildToolsVersion "21.1.2" 

et tout fonctionne très bien. Mais alors j'ai mis à jour mon application à la dernière version:

compileSdkVersion 23 
buildToolsVersion "23.0.1" 

Maintenant, voici la partie étrange. Avec la dernière version de compileSdk et buildTools, si je suis en mode débogage, tout va bien.

Mais si j'exporter le fichier APK, après l'avoir installé dans mon appareil, quand je lance mon application, je reçois l'erreur suivante:

java.lang.RuntimeException: Unable to start activity ComponentInfo{x.x.x/x.x.x.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setOnTouchListener(android.view.View$OnTouchListener)' on a null object reference : at x.x.x.MainActivity.onCreate(Unknown Source) 

Ceci est un problème très étrange ... Avez-vous les gars avez une idée de pourquoi cela se passe?

+0

effacer le projet et construire à nouveau – Amir

Répondre

0

Vous devez appeler setContentView() dans votre onCreate() pour configurer l'interface utilisateur avant d'interagir par programmation avec l'un de ses composants. Vos 2 premières lignes de onCreate() doivent être super.onCreate(savedInstanceState), puis setContentView(R.layout.your_layout). Ensuite, allez-y et configurez le onTouchListener.

+0

Yup, je fais ça. J'ai changé la question pour que ce soit clair. –

+1

Peut-être publier votre contenu activity_main.xml ainsi nous pouvons voir le ImageView, etc. – NoChinDeluxe