2011-11-26 48 views
-1

剛開始檢查android開發,但已經有問題了。當按下bConvert按鈕時,活動關閉。 outputValue.setText顯然使用錯誤。這是怎麼回事?謝謝你的幫助! :)非常基礎的java的android,爲什麼按下按鈕時程序關閉?

public class StartingPoint extends Activity { 
    TextView outputValue; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     initialize(); 
    } 

    private void initialize() { 
     Button bConvert = (Button) findViewById(R.id.bConvert); 
     EditText inputValue = (EditText) findViewById(R.id.etInput); 
     TextView outputValue = (TextView) findViewById(R.id.userOutput); 
     bConvert.setOnClickListener(convertHandler); 
    } 

    View.OnClickListener convertHandler = new View.OnClickListener() { 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      outputValue.setText("Fahrenheit: "+ 100); 
     } 
    }; 

    private float convert(float celsius) { 
     return ((celsius*9/5)+32); 
    } 
} 
+0

您有什麼問題TextView outputValue = (TextView) findViewById(R.id.userOutput);線?具體來說,粘貼錯誤消息。 – Jeffrey

+0

這個標題沒有真正的問題。 – Bert

回答

1

替換

outputValue = (TextView) findViewById(R.id.userOutput); 
1

當初始化outputValue,要創建一個局部變量,而不是你的初始化類變量。

+0

不,它沒有。在類中聲明的全局變量可以在沒有「最終」技巧的情況下訪問。我會看看我能否找到適當的,經典的參考。 ;-)解決方案確實是你的第一段。我更喜歡你的答案,因爲你花時間來解釋。 – davidcesarino

+0

@大衛,這就是爲什麼我說得相當確定,我太懶惰,不能確定。 :) – Jeffrey

+0

沒有概率...對不起,我找不到官方的參考。無論如何,正如我所說的,至少在這個例子中,外部類成員不需要是「最終」或「靜態」。如果你將偵聽器移動到一個方法中,那麼我「相當肯定」:-)它需要是「static」(而不是「final」),否則編譯器會拋出着名的「無法創建靜態引用到非靜態字段......「這就是爲什麼我重複使用全局監聽器的原因(並且你在android代碼中看到了很多)。當然,由於初始化問題,這種情況下的全局「最終」聲明將不起作用。 – davidcesarino

相關問題