2017-10-04 41 views
-4

我是新來的編碼和熱情學習的Android Studio,下面的視頻做編碼。 我已經讀過那篇文章 - 什麼是NullPointerException,並且在更多的相關文章中理解了這個概念,但是我無法修復,雖然我知道錯誤在哪個代碼上,但如果不是這樣,那麼我的問題是什麼。 我按下計算器應用程序的任意按鈕後,面臨着這樣的NullPointerException異常:我該如何解決這個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) 

代碼如下:

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); 


    } 


} 

我已經經歷了很多關於這個錯誤的帖子,但仍無法去弄清楚如何解決我的問題,我知道它應該是一件小事,但我無法理解,請幫助。

+0

佈局後的XML – Romadro

+1

變化'的TextView resultsView =(TextView的)findViewById(R.id。 result_view);''resultsView =(TextView)findViewById(R.id.result_view);'in'onCreate' –

+0

167行是什麼? – meeeee

回答

2

改變這一行:

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

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

現在你resultsView將是全球

+0

謝謝Sumit,問題已解決,但請你解釋爲什麼我會出錯,爲什麼這個改變解決了它,我很抱歉問這個問題,但我仍然在學習。 –

+1

你已經定義了你的變量全局TextView的resultsView,但在初始化的時候,當你再次寫TextView resultsView =(TextView)findViewById(R.id.result_view);你創建了另一個具有相同名稱的變量,但是這是一個局部變量,它的作用域就在onCreate函數中。所以當你在你的numberPressed方法中使用它時,android所指的是沒有初始化的全局變量。這就是爲什麼你得到空指針錯誤 – sumit

+0

哇!我不知道我兩次定義了同樣的東西,謝謝Sumit。 –