2012-06-11 59 views
1

任何人都可以告訴我這些錯誤的含義,實際上我是新來的android編碼,無法找出這些錯誤,請幫助。NullPointerException /幫助閱讀LogCat

06-11 11:56:08.118: W/dalvikvm(593): threadid=1: thread exiting with uncaught exception (group=0x409c01f8) 
06-11 11:56:08.128: E/AndroidRuntime(593): FATAL EXCEPTION: main 
06-11 11:56:08.128: E/AndroidRuntime(593): java.lang.RuntimeException: Unable to start activity ComponentInfo{gaurav.android/gaurav.android.CalcActivity}: java.lang.NullPointerException 
06-11 11:56:08.128: E/AndroidRuntime(593): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956) 
06-11 11:56:08.128: E/AndroidRuntime(593): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 
06-11 11:56:08.128: E/AndroidRuntime(593): at android.app.ActivityThread.access$600(ActivityThread.java:123) 
06-11 11:56:08.128: E/AndroidRuntime(593): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 
06-11 11:56:08.128: E/AndroidRuntime(593): at android.os.Handler.dispatchMessage(Handler.java:99) 
06-11 11:56:08.128: E/AndroidRuntime(593): at android.os.Looper.loop(Looper.java:137) 
06-11 11:56:08.128: E/AndroidRuntime(593): at android.app.ActivityThread.main(ActivityThread.java:4424) 
06-11 11:56:08.128: E/AndroidRuntime(593): at java.lang.reflect.Method.invokeNative(Native Method) 
06-11 11:56:08.128: E/AndroidRuntime(593): at java.lang.reflect.Method.invoke(Method.java:511) 
06-11 11:56:08.128: E/AndroidRuntime(593): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
06-11 11:56:08.128: E/AndroidRuntime(593): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
06-11 11:56:08.128: E/AndroidRuntime(593): at dalvik.system.NativeStart.main(Native Method) 
06-11 11:56:08.128: E/AndroidRuntime(593): Caused by: java.lang.NullPointerException 
06-11 11:56:08.128: E/AndroidRuntime(593): at gaurav.android.CalcActivity.reset(CalcActivity.java:341) 
06-11 11:56:08.128: E/AndroidRuntime(593): at gaurav.android.CalcActivity.onCreate(CalcActivity.java:58) 
06-11 11:56:08.128: E/AndroidRuntime(593): at android.app.Activity.performCreate(Activity.java:4465) 
06-11 11:56:08.128: E/AndroidRuntime(593): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
06-11 11:56:08.128: E/AndroidRuntime(593): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 

這是我的代碼,它實際上是一個簡單的計算器。

package gaurav.android;

import android.app.Activity; 
import android.os.Bundle; 
import android.view.KeyEvent; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.View.OnKeyListener; 
import android.widget.Button; 
import android.widget.EditText; 


public class CalcActivity extends Activity { 
    EditText t=null; 
    private final int MENUITEM_CLOSE = 300; 
    private boolean hasChanged; 
    private boolean readyToClear; 

    public Button b1=null; 
    public Button b2=null; 
    public Button b3=null; 
    public Button b4=null; 
    public Button b5=null; 
    public Button b6=null; 
    public Button b7=null; 
    public Button b8=null; 
    public Button b9=null; 
    public Button b10=null; 
    public Button b11=null; 
    public Button b12=null; 
    public Button b13=null; 
    public Button b14=null; 
    public Button b15=null; 
    public Button b16=null; 
    public Button b17=null; 
    public Button b18=null; 
    public Button b19=null; 
    public Button b20=null; 
    public Button b21=null; 
    public Button b22=null; 
    public Button b23=null; 
    public Button b24=null; 
    public Button b25=null; 
    public Button b26=null; 
    public Button b27=null; 
    public Button b28=null; 

    private double memNum=0; 
    private int operator=1; 
    private double num=0; 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     //setTheme(android.R.style.Theme_Black); 
     setContentView(R.layout.main); 
     reset(); 
     t=(EditText)findViewById(R.id.editText1); 
     b1=(Button)findViewById(R.id.Button17); 
     b2=(Button)findViewById(R.id.Button18); 
     b3=(Button)findViewById(R.id.Button19); 
     b4=(Button)findViewById(R.id.Button12); 
     b5=(Button)findViewById(R.id.Button16); 
     b6=(Button)findViewById(R.id.Button15); 
     b7=(Button)findViewById(R.id.Button06); 
     b8=(Button)findViewById(R.id.Button05); 
     b9=(Button)findViewById(R.id.Button09); 
     b10=(Button)findViewById(R.id.button7); 
     b11=(Button)findViewById(R.id.button1); 
     b12=(Button)findViewById(R.id.button2); 
     b13=(Button)findViewById(R.id.button3); 
     b14=(Button)findViewById(R.id.Button11); 
     b15=(Button)findViewById(R.id.Button07); 
     b16=(Button)findViewById(R.id.Button01); 
     b17=(Button)findViewById(R.id.Button02); 
     b18=(Button)findViewById(R.id.Button03); 
     b19=(Button)findViewById(R.id.Button14); 
     b20=(Button)findViewById(R.id.button4); 
     b21=(Button)findViewById(R.id.Button10); 
     b22=(Button)findViewById(R.id.Button20); 
     b23=(Button)findViewById(R.id.button6); 
     b24=(Button)findViewById(R.id.button9); 
     b25=(Button)findViewById(R.id.button8); 
     b26=(Button)findViewById(R.id.Button13); 
     b27=(Button)findViewById(R.id.Button21); 
     b28=(Button)findViewById(R.id.button30); 

     b1.setOnClickListener(new Button.OnClickListener(){public void onClick(View v){handleNumber(1);}}); 
     b2.setOnClickListener(new Button.OnClickListener(){public void onClick(View v){handleNumber(2);}}); 
     b3.setOnClickListener(new Button.OnClickListener(){public void onClick(View v){handleNumber(3);}}); 
     b4.setOnClickListener(new Button.OnClickListener(){public void onClick(View v){handleNumber(4);}}); 
     b5.setOnClickListener(new Button.OnClickListener(){public void onClick(View v){handleNumber(5);}}); 
     b6.setOnClickListener(new Button.OnClickListener(){public void onClick(View v){handleNumber(6);}}); 
     b7.setOnClickListener(new Button.OnClickListener(){public void onClick(View v){handleNumber(7);}}); 
     b8.setOnClickListener(new Button.OnClickListener(){public void onClick(View v){handleNumber(8);}}); 
     b9.setOnClickListener(new Button.OnClickListener(){public void onClick(View v){handleNumber(9);}}); 
     b10.setOnClickListener(new Button.OnClickListener(){public void onClick(View v){handleNumber(0);}}); 
     b11.setOnClickListener(new Button.OnClickListener(){public void onClick(View v){memNum=0;}}); 
     b12.setOnClickListener(new Button.OnClickListener(){public void onClick(View v){setValue(Double.toString(memNum));}}); 
     b13.setOnClickListener(new Button.OnClickListener(){public void onClick(View v) 
     {}}); 
     b14.setOnClickListener(new Button.OnClickListener(){public void onClick(View v){ 
      memNum = memNum+ Double.parseDouble(t.getText().toString()); 
      operator = 0; 
     }}); 
     b15.setOnClickListener(new Button.OnClickListener(){public void onClick(View v){ 
      memNum = memNum- Double.parseDouble(t.getText().toString()); 
      operator = 0; 
     }}); 
     b16.setOnClickListener(new Button.OnClickListener(){public void onClick(View v){handleBackspace();}}); 
     b17.setOnClickListener(new Button.OnClickListener(){public void onClick(View v){}}); 
     b18.setOnClickListener(new Button.OnClickListener(){public void onClick(View v){reset();}}); 
     b19.setOnClickListener(new Button.OnClickListener(){public void onClick(View v){handlePlusMinus();}}); 
     b20.setOnClickListener(new Button.OnClickListener(){public void onClick(View v){ 
      setValue(Double.toString(Math.sqrt(Double.parseDouble(t.getText().toString())))); 
     }}); 
     b21.setOnClickListener(new Button.OnClickListener(){public void onClick(View v){handleEquals(4);}}); 
     b22.setOnClickListener(new Button.OnClickListener(){public void onClick(View v){handleEquals(3);}}); 
     b23.setOnClickListener(new Button.OnClickListener(){public void onClick(View v){handleEquals(2);}}); 
     b24.setOnClickListener(new Button.OnClickListener(){public void onClick(View v){handleEquals(1);}}); 
     b25.setOnClickListener(new Button.OnClickListener(){public void onClick(View v){handleDecimal();}}); 
     b26.setOnClickListener(new Button.OnClickListener(){public void onClick(View v){ 
      setValue(Double.toString(num*(0.01 * Double.parseDouble(t.getText().toString())))); 
     }}); 
     b27.setOnClickListener(new Button.OnClickListener(){public void onClick(View v){}}); 
     b28.setOnClickListener(new Button.OnClickListener(){public void onClick(View v){handleEquals(0);}}); 

     t.setOnKeyListener(new OnKeyListener() 
     { 
      public boolean onKey(View v,int i,android.view.KeyEvent e) 
      { 
       if (e.getAction() == KeyEvent.ACTION_DOWN) 
       { 
        int keyCode=e.getKeyCode(); 

        switch (keyCode) { 
        case KeyEvent.KEYCODE_0: 
         handleNumber(0); 
         break; 

        case KeyEvent.KEYCODE_1: 
         handleNumber(1); 
         break; 

        case KeyEvent.KEYCODE_2: 
         handleNumber(2); 
         break; 

        case KeyEvent.KEYCODE_3: 
         handleNumber(3); 
         break; 

        case KeyEvent.KEYCODE_4: 
         handleNumber(4); 
         break; 

        case KeyEvent.KEYCODE_5: 
         handleNumber(5); 
         break; 

        case KeyEvent.KEYCODE_6: 
         handleNumber(6); 
         break; 

        case KeyEvent.KEYCODE_7: 
         handleNumber(7); 
         break; 

        case KeyEvent.KEYCODE_8: 
         handleNumber(8); 
         break; 

        case KeyEvent.KEYCODE_9: 
         handleNumber(9); 
         break; 

        case 43: 
         handleEquals(1); 
         break; 

        case KeyEvent.KEYCODE_EQUALS: 
         handleEquals(0); 
         break; 

        case KeyEvent.KEYCODE_MINUS: 
         handleEquals(2); 
         break; 

        case KeyEvent.KEYCODE_PERIOD: 
         handleDecimal(); 
         break; 

        case KeyEvent.KEYCODE_C: 
         reset(); 
         break; 

        case KeyEvent.KEYCODE_SLASH: 
         handleEquals(4); 
         break; 

        case KeyEvent.KEYCODE_DPAD_DOWN: 
         return false; 
        } 
        } 

        return true; 
        } 
        }); 
       } 

       @Override 
       public boolean onCreateOptionsMenu(Menu menu) { 
        menu.add(0,1, MENUITEM_CLOSE, "Close"); 

        return super.onCreateOptionsMenu(menu); 
       } 

       @Override 
       public boolean onOptionsItemSelected(MenuItem item) { 
        switch (item.getItemId()) { 
        case MENUITEM_CLOSE: 
        finish(); 
        break; 
        } 

        return super.onOptionsItemSelected(item); 
       } 

       private void handleEquals(int newOperator) { 
        if (hasChanged) { 
        switch (operator) { 
        case 1: 
        num = num + Double.parseDouble(t.getText().toString()); 
        break; 
        case 2: 
        num = num - Double.parseDouble(t.getText().toString()); 
        break; 
        case 3: 
        num = num * Double.parseDouble(t.getText().toString()); 
        break; 
        case 4: 
        num = num/Double.parseDouble(t.getText().toString()); 
        break; 
        } 

        String txt = Double.toString(num); 
        t.setText(txt); 
        t.setSelection(txt.length()); 

        readyToClear = true; 
        hasChanged = false; 
        } 

        operator = newOperator; 
       } 

       private void handleNumber(int num) { 
        if (operator == 0) 
        reset(); 

        String txt = t.getText().toString(); 
        if (readyToClear) { 
        txt = ""; 
        readyToClear = false; 
        } else if (txt.equals("0")) 
        txt = ""; 

        txt = txt + Integer.toString(num); 

        t.setText(txt); 
        t.setSelection(txt.length()); 

        hasChanged = true; 
       } 

       private void setValue(String value) { 
        if (operator == 0) 
        reset(); 

        if (readyToClear) { 
        readyToClear = false; 
        } 

        t.setText(value); 
        t.setSelection(value.length()); 

        hasChanged = true; 
       } 

       private void handleDecimal() { 
        if (operator == 0) 
        reset(); 

        if (readyToClear) { 
        t.setText("0."); 
        t.setSelection(2); 
        readyToClear = false; 
        hasChanged = true; 
        } else { 
        String txt = t.getText().toString(); 

        if (!txt.contains(".")) { 
        t.append("."); 
        hasChanged = true; 
        } 
        } 
       } 

       private void handleBackspace() { 
        if (!readyToClear) { 
        String txt = t.getText().toString(); 
        if (txt.length() > 0) { 
        txt = txt.substring(0, txt.length() - 1); 
        if (txt.equals("")) 
        txt = "0"; 

        t.setText(txt); 
        t.setSelection(txt.length()); 
        } 
        } 
       } 

       private void handlePlusMinus() { 
        if (!readyToClear) { 
        String txt = t.getText().toString(); 
        if (!txt.equals("0")) { 
        if (txt.charAt(0) == '-') 
        txt = txt.substring(1, txt.length()); 
        else 
        txt = "-" + txt; 

        t.setText(txt); 
        t.setSelection(txt.length()); 
        } 
        } 
       } 

       private void reset() { 
        num = 0; 
        t.setText("0"); 
        t.setSelection(1); 
        operator = 1; 
       } 


        } 
+0

錯誤是在CalcActivity.java.Post您的CalaActivity.java源代碼的行號58。 –

+0

在'gaurav.android.CalcActivity'類中聲明的函數'reset'中沒有被初始化或設置爲Null,並且導致代碼中出現NullPointerException異常(使用Null對象)異常。 –

+0

@ArunGeorge然後如何初始化重置功能? – TRonZ

回答

2

你對線341

CalcActivity.reset(CalcActivity.java:341) 

一個空指針異常如果您雙擊在logcat的這些線,它會帶你到包含錯誤的行。

06-11 11:56:08.128: E/AndroidRuntime(593): at gaurav.android.CalcActivity.reset(CalcActivity.java:341) 
06-11 11:56:08.128: E/AndroidRuntime(593): at gaurav.android.CalcActivity.onCreate(CalcActivity.java:58) 
+1

考慮答案(「,)? –

+0

你能告訴我如何解決它嗎? – TRonZ

+0

向我們展示你的代碼。你忘了初始化一些東西 – JustinDanielson

0

你得到的NullPointerException在handleEquals方法

從你的代碼我看到的是

switch (operator) 
      { 
      case 1: 
       num = num + Double.parseDouble(t.getText().toString()); 
       break; 
      case 2: 
       num = num - Double.parseDouble(t.getText().toString()); 
       break; 
      case 3: 
       num = num * Double.parseDouble(t.getText().toString()); 
       break; 
      case 4: 
       num = num/Double.parseDouble(t.getText().toString()); 
       break; 
      } 

您尚未初始化TextViews。 沒有Initiliaing 牛逼不能使用以下功能

t.getText().toString() 
1

您正在使用TextView之前初始化它就是爲什麼你面對null pointer expection

t=(EditText)findViewById(R.id.editText1); 
    b1=(Button)findViewById(R.id.Button17); 
    b2=(Button)findViewById(R.id.Button18); 
    b3=(Button)findViewById(R.id.Button19); 
    b4=(Button)findViewById(R.id.Button12); 
    b5=(Button)findViewById(R.id.Button16); 
    b6=(Button)findViewById(R.id.Button15); 
    b7=(Button)findViewById(R.id.Button06); 
    b8=(Button)findViewById(R.id.Button05); 
    b9=(Button)findViewById(R.id.Button09); 
    b10=(Button)findViewById(R.id.button7); 
    b11=(Button)findViewById(R.id.button1); 
    b12=(Button)findViewById(R.id.button2); 
    b13=(Button)findViewById(R.id.button3); 
    b14=(Button)findViewById(R.id.Button11); 
    b15=(Button)findViewById(R.id.Button07); 
    b16=(Button)findViewById(R.id.Button01); 
    b17=(Button)findViewById(R.id.Button02); 
    b18=(Button)findViewById(R.id.Button03); 
    b19=(Button)findViewById(R.id.Button14); 
    b20=(Button)findViewById(R.id.button4); 
    b21=(Button)findViewById(R.id.Button10); 
    b22=(Button)findViewById(R.id.Button20); 
    b23=(Button)findViewById(R.id.button6); 
    b24=(Button)findViewById(R.id.button9); 
    b25=(Button)findViewById(R.id.button8); 
    b26=(Button)findViewById(R.id.Button13); 
    b27=(Button)findViewById(R.id.Button21); 
    b28=(Button)findViewById(R.id.button30); 

reset(); 

所以只寫你的reset()方法後,初始化所有view

0

您正在調用reset(),並且您正在使用edittext va該功能內部可以拉伸t。但是,只有在致電reset()後,纔會初始化變量t。交換這些線reset();t=(EditText)findViewById(R.id.editText1);OnCreate()和您的程序應該運行良好。