2014-02-12 40 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如果你喜欢他的回答,不要忘记接受它。 –

相关问题