2017-05-14 1 views
0

J'ai attrapé le message d'erreurAndroid Studio: App ne commence pas par Anonymous mise en œuvre de classe Java

« 5 au 14 décembre: 39: 13,104 2518-2518/com.example.fdai3744.neueleereapp E/AndroidRuntime : FATAL EXCEPTION: principal processus: com.example.fdai3744.neueleereapp, PID: 2518 java.lang.RuntimeException: Impossible d'instancier activité ... »

et voici mon code Java

package com.example.fdai3744.neueleereapp; 

import android.net.wifi.p2p.WifiP2pManager; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 


    public class MainActivity extends AppCompatActivity { 

     public Button button_1 = (Button) findViewById(R.id.button1); //Button 
     public TextView text1 = (TextView)findViewById(R.id.text1); // Textview 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 

      button_1.setOnClickListener(new View.OnClickListener() { // Here I add the ActionListener for my button 

       @Override 
       public void onClick(View v) { 
        text1.setText("Button 1 wurde geklickt!"); 
       } 
      }); 
     } 

    } 

Si je démarre mon application, l'émulateur affiche un message d'erreur "L'application est arrêtée". Comment devrais-je empêcher cette erreur?

+0

est pas là une "causée par: une autre exception" dans le journal? – nandsito

Répondre

1

causée par

public Button button_1 = (Button) findViewById(R.id.button1); //Button 
    public TextView text1 = (TextView)findViewById(R.id.text1); // Textview 

jamais assignez vue avant setContentView() est appelée

votre code modifié

package com.example.fdai3744.neueleereapp; 

import android.net.wifi.p2p.WifiP2pManager; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 


    public class MainActivity extends AppCompatActivity { 

     public Button button_1; 
     public TextView text1; 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 

      button_1 = (Button) findViewById(R.id.button1); //Button 
      text1 = (TextView)findViewById(R.id.text1); // Textview 

      button_1.setOnClickListener(new View.OnClickListener() { // Here I add the ActionListener for my button 

       @Override 
       public void onClick(View v) { 
        text1.setText("Button 1 wurde geklickt!"); 
       } 
      }); 
     } 

    } 
2

Eh bien, la hiérarchie de votre point de vue doit être en vie avant de récupérer individuelle View s de lui et la méthode setContentView() lui donne vie (ou l'instancie).

Comment?

setContentView(View) est une méthode exclusivement disponible pour Activity. En interne, il appelle le setContentView(View) de Windows. Cette méthode définit le contenu de l'activité sur une vue explicite. Cette vue est placée directement dans la hiérarchie de vue de l'activité. Appeler cette fonction "verrouille" diverses caractéristiques de la fenêtre qui ne peuvent pas, à partir de ce point en avant, être changé. Par conséquent, il est appelé qu'une seule fois.

Ainsi, au lieu d'initialiser les vues comme variables d'instance, les instancier à l'intérieur onCreate() après setContentView().

A lire aussi: Android: setContentView and LayoutInflater