Android 运行时异常:无法启动活动
我的任务是在使用垂直方向时,使“常规”计算器和用于横向方向的“技术”计算器。 所以,首先,我为两个方向都做了接口,并在emulator上测试它以确保它正常工作 对于横向,我在“res”中创建了一个文件夹“layoutland”,并放置了同名的xml文件,用于垂直方向。我只有一项活动 据我所知,我为垂直方向的按钮编写的代码应该适用于横向方向具有相同Id的按钮 然后,我为“常规”计算器编写了一些代码,它工作得很好,但当我决定改变方向时,我的应用程序停止了,LogCat说smth如下: 对于横向,我在“res”中创建了一个文件夹“layoutland”,并放置了同名的xml文件,用于垂直方向。我只有一项活动 据我所知,我为垂直方向的按钮编写的代码应该适用于横向方向具有相同Id的按钮 Lofcat接着说:Android 运行时异常:无法启动活动,android,android-layout,Android,Android Layout,我的任务是在使用垂直方向时,使“常规”计算器和用于横向方向的“技术”计算器。 所以,首先,我为两个方向都做了接口,并在emulator上测试它以确保它正常工作 对于横向,我在“res”中创建了一个文件夹“layoutland”,并放置了同名的xml文件,用于垂直方向。我只有一项活动 据我所知,我为垂直方向的按钮编写的代码应该适用于横向方向具有相同Id的按钮 然后,我为“常规”计算器编写了一些代码,它工作得很好,但当我决定改变方向时,我的应用程序停止了,LogCat说smth如下: 对于横向,我在
09-20 10:10:37.544: D/AndroidRuntime(450): Shutting down VM
09-20 10:10:37.555: W/dalvikvm(450): threadid=1: thread exiting with uncaught exception (group=0x40014760)
09-20 10:10:37.564: E/AndroidRuntime(450): FATAL EXCEPTION: main
09-20 10:10:37.564: E/AndroidRuntime(450): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.calculatorapp/com.example.calculatorapp.MainActivity}: java.lang.NullPointerException
09-20 10:10:37.564: E/AndroidRuntime(450): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1815)
09-20 10:10:37.564: E/AndroidRuntime(450): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1831)
09-20 10:10:37.564: E/AndroidRuntime(450): at android.app.ActivityThread.access$500(ActivityThread.java:122)
09-20 10:10:37.564: E/AndroidRuntime(450): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1024)
09-20 10:10:37.564: E/AndroidRuntime(450): at android.os.Handler.dispatchMessage(Handler.java:99)
09-20 10:10:37.564: E/AndroidRuntime(450): at android.os.Looper.loop(Looper.java:132)
09-20 10:10:37.564: E/AndroidRuntime(450): at android.app.ActivityThread.main(ActivityThread.java:4123)
09-20 10:10:37.564: E/AndroidRuntime(450): at java.lang.reflect.Method.invokeNative(Native Method)
09-20 10:10:37.564: E/AndroidRuntime(450): at java.lang.reflect.Method.invoke(Method.java:491)
09-20 10:10:37.564: E/AndroidRuntime(450): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
09-20 10:10:37.564: E/AndroidRuntime(450): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
09-20 10:10:37.564: E/AndroidRuntime(450): at dalvik.system.NativeStart.main(Native Method)
09-20 10:10:37.564: E/AndroidRuntime(450): Caused by: java.lang.NullPointerException
09-20 10:10:37.564: E/AndroidRuntime(450): at com.example.calculatorapp.MainActivity.onCreate(MainActivity.java:127)
09-20 10:10:37.564: E/AndroidRuntime(450): at android.app.Activity.performCreate(Activity.java:4397)
09-20 10:10:37.564: E/AndroidRuntime(450): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048)
09-20 10:10:37.564: E/AndroidRuntime(450): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1779)
09-20 10:10:37.564: E/AndroidRuntime(450): ... 11 more
09-20 10:10:42.074: I/Process(450): Sending signal. PID: 450 SIG: 9
我的活动代码如下所示:
public class MainActivity extends Activity {
Button btn0, btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9, btnDot, btnDel, btnCE, btnC,
btnPlus, btnMinus, btnMult, btnDiv, btnEqual, btn1divX, btnPercent, btnSqrt, btnSign, btnMC, btnMR, btnMS, btnMplus, btnMminus;
TextView currentView;
StringBuilder numberStringBuilder;
double memory;
boolean memoryIsFull;
char sign;
double leftOperand, rightOperand;
boolean signWasPressedOnce;
boolean equalsignWasPressedOnce;
boolean leftOperandIsReady;
boolean rightOperandIsReady;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
numberStringBuilder = new StringBuilder();
btn0 = (Button)findViewById(R.id.btn0);
btn1 = (Button)findViewById(R.id.btn1);
......... //other buttons
btnMS.setEnabled(false);
currentView = (TextView)findViewById(R.id.display);
leftOperand = rightOperand = 0;
signWasPressedOnce = true;
equalsignWasPressedOnce = true;
leftOperandIsReady = false;
rightOperandIsReady = false;
memoryIsFull = false;
OnClickListener onClickNumber = new OnClickListener() {
@Override
public void onClick(View v) {
switch(v.getId()) {
case R.id.btn0:
numberStringBuilder.append("0");
break;
..............//some other buttons
btn0.setOnClickListener(onClickNumber);
btn1.setOnClickListener(onClickNumber);
..............//some other setOnClick opeartions
OnClickListener onClickOperation = new OnClickListener() {
@Override
public void onClick(View v) {
double valueFromDisplay;
String currentViewFromDisplay;
switch(v.getId()) {
case R.id.btnPlus:
if(signWasPressedOnce)
actAsSignWasPressedOnce('+');
else
actAsSignWasPressedMoreThanOnce('+');
break;
..............//some other buttons
btnPlus.setOnClickListener(onClickOperation);
btnMinus.setOnClickListener(onClickOperation);
................// and some methods
可能的原因是,您使用的是EditText或TextView之类的元素,该元素仅在layout文件夹的xml文件中可用,而在layout land文件夹的xml文件中不可用 因此,当您更改方向时,布局文件没有该元素,并且在每次方向更改时再次调用onCreate,它找不到该id并引发空指针异常 请检查两个布局xml文件。 我猜您在其中任何一个中都缺少了一些元素,并且在MainActivity.java中使用了它的引用 你的logcat清楚地说,错误在哪里-
Caused by: java.lang.NullPointerException 09-20 10:10:37.564: at
android.app.Instrumentation.callActivityOnCreate
希望能有所帮助。发布完整的日志猫输出将完整的日志猫添加到您的问题中…并提供您的活动代码。onCreate是应用程序崩溃的地方,因此我们需要该方法和两个xml文件。
原因:java.lang.NullPointerException 09-20 10:10:37.564:E/AndroidRuntime(450):在com.example.calculatorapp.MainActivity.onCreate(MainActivity.java:127)
-logcat非常适合告诉你去哪里看!非常感谢!这就是我的错误所在,但我想不出任何理由,现在我明白了works@Lana-请比较两个xml文件。这就是问题所在。你错过了一些有用的东西!!!非常感谢你!!!是的,我的错误在一个按钮的不同id中@兰妮卡,你能接受这个答案吗?你说它解决了你的问题。