2016-11-26 100 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

相关问题