2014-02-12 85 views
0

問題我有與onItemSelected方法。每當我嘗試更改視圖值時,示例:TextView,EditView它會引發錯誤。Java Android微調onItemSelected

我在試圖做的是當我點擊微調器上的東西時,它會在文本上顯示一些東西(當前任何東西)。我希望你能幫助!謝謝。

這裏是我的代碼,所以你可以看看它:

public class MainActivity extends Activity implements OnItemSelectedListener { 

    Spinner spinner; 
    String[] paths = {"Rectangle", "Circle", "Triangle"}; 
    String selected; 
    Button equals; 
    TextView parm1, parm2; 
    EditText value1, value2; 
    CheckBox checkArea, checkPerm; 
    Boolean checkedArea = true, checkedPerm = false; 

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

     ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_spinner_item, paths); 
     spinner = (Spinner) findViewById(R.id.spinner); 
     spinner.setAdapter(adapter); 
     spinner.setOnItemSelectedListener(this); 
    } 

    @Override 
    public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, 
      long arg3) { 
     int index = arg0.getSelectedItemPosition(); 

     if(paths[index] == "Rectangle"){ 
      //Does work 
      Toast.makeText(getBaseContext(), "You selected Rectangle", Toast.LENGTH_LONG).show(); 

      //Doesn't work 
      parm1.setText("Hello"); 
     } 
    } 

    @Override 
    public void onNothingSelected(AdapterView<?> arg0) { 
     // TODO Auto-generated method stub 

    } 
} 

這是當我運行程序彈出的錯誤。虛擬設備將一直運行該程序,直到我打開它,然後它會說不幸*「Programs_name」*已停止工作。以下是錯誤日誌:

02-12 17:26:41.395: D/dalvikvm(1478): GC_FOR_ALLOC freed 45K, 4% free 3331K/3444K, paused 47ms, total 51ms 
02-12 17:26:41.985: D/AndroidRuntime(1478): Shutting down VM 
02-12 17:26:41.985: W/dalvikvm(1478): threadid=1: thread exiting with uncaught exception (group=0xb1aadba8) 
02-12 17:26:41.995: E/AndroidRuntime(1478): FATAL EXCEPTION: main 
02-12 17:26:41.995: E/AndroidRuntime(1478): Process: com.example.gcfcalculator, PID: 1478 
02-12 17:26:41.995: E/AndroidRuntime(1478): java.lang.NullPointerException 
02-12 17:26:41.995: E/AndroidRuntime(1478):  at com.example.gcfcalculator.MainActivity.onItemSelected(MainActivity.java:53) 
02-12 17:26:41.995: E/AndroidRuntime(1478):  at android.widget.AdapterView.fireOnSelected(AdapterView.java:893) 
02-12 17:26:41.995: E/AndroidRuntime(1478):  at android.widget.AdapterView.access$200(AdapterView.java:48) 
02-12 17:26:41.995: E/AndroidRuntime(1478):  at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:861) 
02-12 17:26:41.995: E/AndroidRuntime(1478):  at android.os.Handler.handleCallback(Handler.java:733) 
02-12 17:26:41.995: E/AndroidRuntime(1478):  at android.os.Handler.dispatchMessage(Handler.java:95) 
02-12 17:26:41.995: E/AndroidRuntime(1478):  at android.os.Looper.loop(Looper.java:136) 
02-12 17:26:41.995: E/AndroidRuntime(1478):  at android.app.ActivityThread.main(ActivityThread.java:5017) 
02-12 17:26:41.995: E/AndroidRuntime(1478):  at java.lang.reflect.Method.invokeNative(Native Method) 
02-12 17:26:41.995: E/AndroidRuntime(1478):  at java.lang.reflect.Method.invoke(Method.java:515) 
02-12 17:26:41.995: E/AndroidRuntime(1478):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
02-12 17:26:41.995: E/AndroidRuntime(1478):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
02-12 17:26:41.995: E/AndroidRuntime(1478):  at dalvik.system.NativeStart.main(Native Method) 
02-12 17:26:47.055: I/Process(1478): Sending signal. PID: 1478 SIG: 9 
+2

你永遠不會初始化'parm1'。還可以使用equals()來比較字符串值。 –

回答

1

你沒有參考的TextView PARM1,得到一個參考,你必須先調用findViewById如下:

parm1 = (TextView) findViewById(R.id.yourId); 

直到你做到這一點,你就可以使用該TextView的,也比較字符串時,不要使用==而不是去Object.equal(),只是作爲一個小有用的技巧,如果你有一個字符串,而不是做

paths[index].equals("Rectangle") 

"Rectangle".equals(paths[index]) 

這種方式,你有空指針異常額外的驗證,因爲你的文字不可能是零,但那裏有一個機會,「路徑[指數]」可能爲空

希望它能幫助!

商祺!

+0

謝謝你!它完美的工作!我不相信我忘了引用TextView parm1。我真的很認真。 –

+0

@ user3303817如果你喜歡他的回答,不要忘記接受它。 –

相關問題