2017-10-04 3 views
-4

Je suis novice en codage et j'apprends avec enthousiasme Android Studio, en suivant des vidéos pour coder. J'ai déjà parcouru cet article - Qu'est-ce que NullPointerException et compris le concept dans quelques autres articles connexes mais je suis incapable de corriger si je comprends l'erreur est sur quel code mais sinon, alors quelle est ma question. Je suis face à ce NullPointerException après avoir appuyé sur une touche quelconque sur l'application de la calculatrice:Comment réparer cette erreur NullPointError?

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference 
                      at com.blogeomics.calcee.MainActivity.numberPressed(MainActivity.java:167) 
                      at com.blogeomics.calcee.MainActivity$7.onClick(MainActivity.java:97) 
code

est ci-dessous:

package com.blogeomics.calcee; 

import android.app.Activity; 
import android.media.Image; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ImageButton; 
import android.widget.TextView; 

import static android.R.string.no; 
import static android.os.Build.VERSION_CODES.O; 

public class MainActivity extends AppCompatActivity { 

    String runningNumber = "0"; 
    TextView resultsView; 



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

     Button oneBtn = (Button) findViewById(R.id.button1); 
     Button twoBtn = (Button) findViewById(R.id.button2); 
     Button threeBtn = (Button) findViewById(R.id.button3); 
     Button fourBtn = (Button) findViewById(R.id.button4); 
     Button fiveBtn = (Button) findViewById(R.id.button5); 
     Button sixBtn = (Button) findViewById(R.id.button6); 
     Button sevenBtn = (Button) findViewById(R.id.button7); 
     Button eightBtn = (Button) findViewById(R.id.button8); 
     final Button nineBtn = (Button) findViewById(R.id.button9); 
     Button zeroBtn = (Button) findViewById(R.id.button0); 

     ImageButton calcBtn = (ImageButton) findViewById(R.id.buttonEqual); 
     ImageButton divideBtn = (ImageButton) findViewById(R.id.buttonDivide); 
     ImageButton multiplyBtn = (ImageButton) findViewById(R.id.buttonMultiply); 
     ImageButton addBtn = (ImageButton) findViewById(R.id.buttonAdd); 
     ImageButton subtractBtn = (ImageButton) findViewById(R.id.buttonSubtract); 

     Button clearBtn = (Button) findViewById(R.id.buttonClear); 
     TextView resultsView = (TextView) findViewById(R.id.result_view); 

     resultsView.setText(""); 

     oneBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       numberPressed(1); 

      } 
     }); 

     twoBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       numberPressed(2); 

      } 
     }); 

     threeBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       numberPressed(3); 
      } 
     }); 

     fourBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       numberPressed(4); 
      } 
     }); 

     fiveBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       numberPressed(5); 
      } 
     }); 

     sixBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       numberPressed(6); 
      } 
     }); 

     sevenBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       numberPressed(7); 
      } 
     }); 

     eightBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       numberPressed(8); 
      } 
     }); 

     nineBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       numberPressed(9); 
      } 
     }); 

     zeroBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       numberPressed(0); 
      } 
     }); 

     calcBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

      } 
     }); 

     addBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

      } 
     }); 

     subtractBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

      } 
     }); 

     multiplyBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

      } 
     }); 

     divideBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

      } 
     }); 

     clearBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

      } 
     }); 
    } 

    void numberPressed(int number) { 
     runningNumber = runningNumber + String.valueOf(number); 
     resultsView.setText(runningNumber); 


    } 


} 

Je suis passé par beaucoup de messages au sujet de cette erreur, mais toujours incapable de comprendre comment RÉSOLVE mon problème, je sais que ce devrait être une chose mineure mais je ne peux pas comprendre, s'il vous plaît aider.

+0

après la mise en page xml – Romadro

+1

changement 'TextView resultsView = (TextView) findViewById (R.id. result_view); '' resultsView = (TextView) findViewById (R.id.result_view); 'dans' onCreate' –

+0

Qu'y a-t-il sur la ligne 167? – meeeee

Répondre

2

Modifier cette ligne:

TextView resultsView = (TextView) findViewById(R.id.result_view); 

à

resultsView = (TextView) findViewById(R.id.result_view); 

maintenant votre resultsView sera globale

+0

Merci Sumit, le problème est résolu mais pourriez-vous s'il vous plaît expliquer pourquoi je recevais erreur et pourquoi ce changement l'a résolu, je m'excuse de demander cela mais je suis encore en train d'apprendre. –

+1

vous avez défini votre variable globalement TextView resultsView mais lors de l'initialisation lorsque vous avez à nouveau écrit TextView resultsView = (TextView) findViewById (R.id.result_view); vous avez créé une autre variable avec le même nom mais il s'agissait d'une variable locale dont la portée se trouvait juste à l'intérieur de la fonction onCreate. Donc quand vous l'utilisiez à l'intérieur de votre méthode numberPressed android faisait référence à la variable globale qui n'a pas été initialisée. c'est pourquoi vous obteniez une erreur de pointeur Null – sumit

+0

Wow! Je ne savais pas que j'avais défini deux fois la même chose, merci Sumit. –