2013-04-22 88 views
1

我有一个应用程序,我需要能够从一个活动切换到下一个,但也有第一个活动有一个温度转换器,它使用一个按钮来计算答案。此按钮用于工作,但由于我已更改oncreate以允许活动之间切换工作,它已停止工作,现在只是关闭应用程序。第二个按钮上的一个活动关闭Android应用程序下降

public class MainActivity extends Activity { 
    private EditText text; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Button next = (Button) findViewById(R.id.Button01); 
     next.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View view) { 
       Intent myIntent = new Intent(view.getContext(), SecondScreen.class); 
       startActivityForResult(myIntent, 0); 
      } 
     }); 
    } 

    // This method is called at button click because we assigned the name to the 
    // "OnClick property" of the button 
    public void onClick(View view) { 
     switch (view.getId()) { 
     case R.id.button1: 
      RadioButton celsiusButton = (RadioButton) findViewById(R.id.radio0); 
      RadioButton fahrenheitButton = (RadioButton) findViewById(R.id.radio1); 
      if (text.getText().length() == 0) { 
       Toast.makeText(this, "Please enter a valid number", Toast.LENGTH_LONG).show(); 
       return; 
      } 
      float inputValue = Float.parseFloat(text.getText().toString()); 
      if (celsiusButton.isChecked()) { 
       text.setText(String.valueOf(convertFahrenheitToCelsius(inputValue))); 
       celsiusButton.setChecked(false); 
       fahrenheitButton.setChecked(true); 
      } 
      else { 
       text.setText(String.valueOf(convertCelsiusToFahrenheit(inputValue))); 
       fahrenheitButton.setChecked(false); 
       celsiusButton.setChecked(true); 
      } 
      break; 
     } 
    } 

    // Converts to celsius 
    private float convertFahrenheitToCelsius(float fahrenheit) { 
     return ((fahrenheit - 32) * 5/9); 
    } 

    // Converts to fahrenheit 
    private float convertCelsiusToFahrenheit(float celsius) { 
     return ((celsius * 9)/5) + 32; 
    } 
} 

的logcats空的,但是这是在其它部分

[2013-04-22 14:45:24 - ddms] Can't bind to local 8888 for debugger 
    [2013-04-22 15:04:58 - Unexpected error while launching logcat. Try reselecting the        device.] device not found 
    com.android.ddmlib.AdbCommandRejectedException: device not found 
    at com.android.ddmlib.AdbHelper.setDevice(AdbHelper.java:752) 
    at com.android.ddmlib.AdbHelper.executeRemoteCommand(AdbHelper.java:373) 
    at com.android.ddmlib.Device.executeShellCommand(Device.java:462) 
    at com.android.ddmuilib.logcat.LogCatReceiver$1.run(LogCatReceiver.java:110) 
    at java.lang.Thread.run(Unknown Source) 
    [2013-04-22 15:07:18 - ddms] Can't bind to local 8888 for debugger 

    4-22 15:26:56.392: W/Trace(909): Unexpected value from nativeGetEnabledTags: 0 
    04-22 15:26:56.397: W/Trace(909): Unexpected value from nativeGetEnabledTags: 0 
    04-22 15:26:56.417: D/AndroidRuntime(909): Shutting down VM 
    04-22 15:26:56.417: W/dalvikvm(909): threadid=1: thread exiting with uncaught    exception (group=0x40a70930) 
    04-22 15:26:56.447: E/AndroidRuntime(909): FATAL EXCEPTION: main 
    04-22 15:26:56.447: E/AndroidRuntime(909): java.lang.IllegalStateException: Could not execute method of the activity 
    04-22 15:26:56.447: E/AndroidRuntime(909): at android.view.View$1.onClick(View.java:3597) 
    04-22 15:26:56.447: E/AndroidRuntime(909): at android.view.View.performClick(View.java:4202) 
    04-22 15:26:56.447: E/AndroidRuntime(909): at android.view.View$PerformClick.run(View.java:17340) 
    04-22 15:26:56.447: E/AndroidRuntime(909): at android.os.Handler.handleCallback(Handler.java:725) 
    04-22 15:26:56.447: E/AndroidRuntime(909): at android.os.Handler.dispatchMessage(Handler.java:92) 
    04-22 15:26:56.447: E/AndroidRuntime(909): at android.os.Looper.loop(Looper.java:137) 
    04-22 15:26:56.447: E/AndroidRuntime(909): at android.app.ActivityThread.main(ActivityThread.java:5039) 
    04-22 15:26:56.447: E/AndroidRuntime(909): at java.lang.reflect.Method.invokeNative(Native Method) 
    04-22 15:26:56.447: E/AndroidRuntime(909): at java.lang.reflect.Method.invoke(Method.java:511) 
    04-22 15:26:56.447: E/AndroidRuntime(909): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
    04-22 15:26:56.447: E/AndroidRuntime(909): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
    04-22 15:26:56.447: E/AndroidRuntime(909): at dalvik.system.NativeStart.main(Native Method) 
    04-22 15:26:56.447: E/AndroidRuntime(909): Caused by: java.lang.reflect.InvocationTargetException 
    04-22 15:26:56.447: E/AndroidRuntime(909): at java.lang.reflect.Method.invokeNative(Native Method) 
    04-22 15:26:56.447: E/AndroidRuntime(909): at java.lang.reflect.Method.invoke(Method.java:511) 
    04-22 15:26:56.447: E/AndroidRuntime(909): at android.view.View$1.onClick(View.java:3592) 
    04-22 15:26:56.447: E/AndroidRuntime(909): ... 11 more 
    04-22 15:26:56.447: E/AndroidRuntime(909): Caused by: java.lang.NullPointerException 
    04-22 15:26:56.447: E/AndroidRuntime(909): at com.example.assignment2project.MainActivity.tempConverterClick(MainActivity.java:42) 
    04-22 15:26:56.447: E/AndroidRuntime(909): ... 14 more 
+0

post logcat info – Raghunandan 2013-04-22 14:02:18

+0

那是什么?对不起新的日食 – 2013-04-22 14:03:50

+0

窗口 - >显示查看 - >其他 - > Logcat – 2013-04-22 14:05:19

回答

1

我认为是有冲突的,它不会出现你要重写,而不是通用的点法onClick方法,所以我假设你已经定义XML中的onClick财产onClick,让我们尝试以下操作:

在XML中,定义onClick的东西像什么我在下面:tempConverterClick

<Button 
    android:id="@+id/button1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:onClick="tempConverterClick" 
    android:text="@string/my_button_txt" /> 

现在在Java端,让我们先来测试Toast

public void tempConverterClick(View view) { 
    Toast.makeText(this, "Temp Converter click worked!", Toast.LENGTH_LONG).show(); 
} 

如果这样的作品,然后让我们尝试您最初的代码在这个新的单击处理:

public void tempConverterClick(View view) { 
    switch (view.getId()) { 
    case R.id.button1: 
     RadioButton celsiusButton = (RadioButton) findViewById(R.id.radio0); 
     RadioButton fahrenheitButton = (RadioButton) findViewById(R.id.radio1); 
     if (text.getText().length() == 0) { 
      Toast.makeText(this, "Please enter a valid number", Toast.LENGTH_LONG).show(); 
      return; 
     } 
     float inputValue = Float.parseFloat(text.getText().toString()); 
     if (celsiusButton.isChecked()) { 
      text.setText(String.valueOf(convertFahrenheitToCelsius(inputValue))); 
      celsiusButton.setChecked(false); 
      fahrenheitButton.setChecked(true); 
     } 
     else { 
      text.setText(String.valueOf(convertCelsiusToFahrenheit(inputValue))); 
      fahrenheitButton.setChecked(false); 
      celsiusButton.setChecked(true); 
     } 
     break; 
    } 
} 

为了避免将来出现混乱和那些谁试图帮助的混乱,我会强烈建议改变你的命名约定。创建ID的,涉及到的动作,目的等。具有R.id.Button01R.id.button1非常混乱


编辑

看来,当你改变了你的onCreate你可能已经删除了EditText实例。

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

    // Add this line with the appropriate ID reference 
    text = (EditText)findViewById(R.id.your_edit_text_id); 

    Button next = (Button) findViewById(R.id.Button01); 
    next.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View view) { 
      Intent myIntent = new Intent(view.getContext(), SecondScreen.class); 
      startActivityForResult(myIntent, 0); 
     } 
    }); 
} 
+0

当点击计算按钮(button1)时出现以下消息“不幸assign2项目已停止”,并关闭应用程序 – 2013-04-22 14:42:43

+0

public void tempConverterClick(View view){ Toast.makeText(this,“Temp Converter click worked!”,Toast .LENGTH_LONG).show(); }这工作,但是当我们用新的处理程序使用原始代码时,它关闭了应用程序 – 2013-04-22 14:48:10

+0

您是否通过上面显示的代码获得此代码?该消息应该有一个'LogCat'错误,你能告诉我那个吗? – jnthnjns 2013-04-22 14:48:25

0

限定外onCreate方法您的开关壳体方法并用的OnCreate中的onclick方法中的参数调用它。它像 checkbuttonclick(buttonid);

你的checkbuttonclick(int id)。将包含开关盒的方法定义。

相关问题