2016-11-26 82 views
-2

我是開發者(我的第一個項目),請幫助!當我開始從activity_main中選擇一個沒有任何函數的按鈕的情況下,從dkk中選擇一個新的活動時,它會工作,但是當我嘗試在新活動上實際執行某些操作時,例如運行init();它立即停止。我應該改變什麼?開始新活動時Android應用崩潰

進口...

公共類fromdkk擴展AppCompatActivity實現View.OnClickListener {

private Button USD,CAD,EUR,GBP; 
private EditText insert; 
private TextView result; 

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

private void init() { 

    USD=(Button)findViewById(R.id.usd); 
    CAD=(Button)findViewById(R.id.cad); 
    EUR=(Button)findViewById(R.id.eur); 
    GBP=(Button)findViewById(R.id.gbp); 


    insert=(EditText)findViewById(R.id.ins); 
    result=(TextView)findViewById(R.id.res); 



    USD.setOnClickListener(this);// on click do this which is stated later as a function 
    EUR.setOnClickListener(this); 
    CAD.setOnClickListener(this); 
    GBP.setOnClickListener(this); 

} 
@Override 
public void onClick(View view) { 
    String num1=insert.getText().toString();//get text from user 
    float usd1= (float) 0.142; 
    float eur= (float) 0.134; 
    float cad= (float) 0.192; 
    float gbp= (float) 0.114; 


    switch(view.getId()) {//switch between an cases regarding Ids, execute operation which matches button id 


     case R.id.usd: 
      float curr = Float.parseFloat(num1) * Float.parseFloat(String.valueOf(usd1)); 
      result.setText(String.valueOf(curr) + " $"); 
      break; 

     case R.id.cad: 
      float curr2 = Float.parseFloat(num1) * Float.parseFloat(String.valueOf(cad)); 
      result.setText(String.valueOf(curr2) + " $"); 
      break; 

     case R.id.eur: 
      float curr3 = Float.parseFloat(num1) * Float.parseFloat(String.valueOf(eur)); 
      result.setText(String.valueOf(curr3)+ " €"); 
      break; 

     case R.id.gbp: 
      float curr4 = Float.parseFloat(num1) * Float.parseFloat(String.valueOf(gbp)); 
      result.setText(String.valueOf(curr4) + " £"); 
      break; 

應用程序日誌:---------崩潰的開始 E/AndroidRuntime:FATAL EXCEPTION:main 進程:com.example.martin.currencyconverter,PID:2381 java.lang.RuntimeException:無法啓動活動ComponentInfo {com.example.martin.currencyconverter/com.example.martin.currencyconverter.fromdkk}:java .lang.NullPointerException:嘗試調用虛擬會議HOD '無效android.widget.Button.setOnClickListener(android.view.View $ OnClickListener)' 上的空對象引用 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646)

logcat的:11-26 16:28:41.191 2247-2438/com.example.martin.currencyconverter I/OpenGLRenderer:初始化EGL 1.4版 11-26 16:28:41.191 2247-2438/com.example.martin.currencyconverter D/OpenGLRenderer:Swap行爲1 11-26 16:28:41.316 2247-2438/com.example.martin.currencyconverter E/EGL_emulation:tid 2438:eglSurfaceAttrib(1146):錯誤0x3009(EGL_BAD_MATCH) 11-26 16:28:41.316 2247- 2438/com.example.martin.currencyconverter W/OpenGLRenderer:無法在曲面0x9f9fec20上設置EGL_SWAP_BEHAVIOR,錯誤= EGL_BAD_MATCH

+0

請將logcat添加到問題中,並確認您要啓動的活動位於清單中 –

+0

可能重複[什麼是NullPointerException,以及如何修復它?](http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it) – Henry

+0

它在清單中,錯誤:試圖調用虛擬方法'void android.widget.Button.setOnClickListener(android .view.View $ OnClickListener)'的空對象引用 – quant

回答

0

,你必須首先初始化按鈕查看例如

如果你的XML,你像這樣定義

  <TextView 
       android:id="@+id/mybtn" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_marginRight="16dp" 
       android:layout_marginTop="16dp" 
       android:text="Click me!" 
       /> 
在活動

Button b = (Button) findViewById(R.id.mybtn); 

按鈕此行Button獲取innitialized後那麼只有你可以添加listner到它

如果你在一個*Fragment*你已經寫了

Button b = (Button) rootView.findViewById(R.id.mybtn); 

其中rootView被認爲是膨脹的片段視圖。

+0

你幫我,按鈕出了問題,你是男人謝謝! – quant

+0

你可以通過接受答案來感謝我:) – Jayanth

+0

Np,我做到了! – quant