很遗憾应用程序已停止运行。

4

我是Android应用开发的新手。我正在进行这个教程应用程序。这是一个非常简单的应用程序。它从计数器中加1减1。当我在模拟器中运行时,它显示“抱歉,教程已停止工作”。代码没有错误。API级别为17。请帮助我解决问题。

Java代码:

public class Startingpoint extends Activity {
  int counter=0;   
  Button add,subtract; 
  TextView display; 

  @Override    
  protected void onCreate(Bundle savedInstanceState) {    
    super.onCreate(savedInstanceState);    
    setContentView(R.layout.startingpoint);    
    add = (Button) findViewById(R.id.bAdd);    
    subtract= (Button) findViewById(R.id.bSubtract);   
    display= (Button) findViewById(R.id.text);    
    add.setOnClickListener(new View.OnClickListener() {

      @Override   
      public void onClick(View v) {   
        counter++;  
        display.setText("The total is " + counter);   
      }   
    });   

    subtract.setOnClickListener(new View.OnClickListener() {
      @Override 
      public void onClick(View v) {
        counter--;
        display.setText("The total is " + counter);
      }

    });
  }

  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.startingpoint, menu);
    return true;
  }
}

在XML中布局代码:
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
              android:layout_width="fill_parent"    
              android:layout_height="fill_parent"     
              android:orientation="vertical" >  

    <TextView android:id="@+id/text"    
              android:layout_width="wrap_content"   
              android:layout_height="wrap_content"
              android:text="Your total is 0"
              android:textSize="35dp"
              android:layout_gravity="center"
              android:gravity="center"/>

    <Button   android:layout_width="250dp"
              android:layout_height="wrap_content"
              android:text="Add One" 
              android:layout_gravity="center" 
              android:textSize="25dp"
              android:id="@+id/bAdd"/>

     <Button  android:layout_width="250dp"
              android:layout_height="wrap_content"
              android:text="Subtract One" 
              android:layout_gravity="center" 
              android:textSize="25dp"
              android:id="@+id/bSubtract"/>
</LinearLayout>

以下是logcat的输出:

03-02 02:45:10.730: D/AndroidRuntime(780): Shutting down VM
03-02 02:45:10.730: W/dalvikvm(780): threadid=1: thread exiting with uncaught exception (group=0x40a71930)
03-02 02:45:10.750: E/AndroidRuntime(780): FATAL EXCEPTION: main
03-02 02:45:10.750: E/AndroidRuntime(780): java.lang.RuntimeException: Unable to start activity ComponentInfo{tutorial.example.tutorial/tutorial.example.tutorial.Startingpoint}: java.lang.ClassCastException: android.widget.TextView cannot be cast to android.widget.Button
03-02 02:45:10.750: E/AndroidRuntime(780):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
03-02 02:45:10.750: E/AndroidRuntime(780):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
03-02 02:45:10.750: E/AndroidRuntime(780):  at android.app.ActivityThread.access$600(ActivityThread.java:141)
03-02 02:45:10.750: E/AndroidRuntime(780):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
03-02 02:45:10.750: E/AndroidRuntime(780):  at android.os.Handler.dispatchMessage(Handler.java:99)
03-02 02:45:10.750: E/AndroidRuntime(780):  at android.os.Looper.loop(Looper.java:137)
03-02 02:45:10.750: E/AndroidRuntime(780):  at android.app.ActivityThread.main(ActivityThread.java:5041)
03-02 02:45:10.750: E/AndroidRuntime(780):  at java.lang.reflect.Method.invokeNative(Native Method)
03-02 02:45:10.750: E/AndroidRuntime(780):  at java.lang.reflect.Method.invoke(Method.java:511)
03-02 02:45:10.750: E/AndroidRuntime(780):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
03-02 02:45:10.750: E/AndroidRuntime(780):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
03-02 02:45:10.750: E/AndroidRuntime(780):  at dalvik.system.NativeStart.main(Native Method)
03-02 02:45:10.750: E/AndroidRuntime(780): Caused by: java.lang.ClassCastException: android.widget.TextView cannot be cast to android.widget.Button
03-02 02:45:10.750: E/AndroidRuntime(780):  at tutorial.example.tutorial.Startingpoint.onCreate(Startingpoint.java:22)
03-02 02:45:10.750: E/AndroidRuntime(780):  at android.app.Activity.performCreate(Activity.java:5104)
03-02 02:45:10.750: E/AndroidRuntime(780):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
03-02 02:45:10.750: E/AndroidRuntime(780):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
03-02 02:45:10.750: E/AndroidRuntime(780):  ... 11 more

下次请在此处发布您的代码,并进行适当的格式化。对我来说,双倍行距的代码不太易读。 - A--C
1
代码中没有错误。我想你的意思是没有编译错误。显然,至少有一个错误。 - Stephen C
2个回答

2
display= (Button) findViewById(R.id.text);

应该是

display= (TextView) findViewById(R.id.text);

由于display应该引用一个TextView实例,但你明确地将其转换为Button,而这些类型不兼容


谢谢,它起作用了!另外,在创建新的Android虚拟设备时应选择哪个设备?这对我来说似乎很困惑。 - user2125722
@user2125722 很高兴听到它起作用了!由于您是新手,并且您的问题已经解决,请确保阅读“接受答案的工作原理?”以了解如何接受答案。至于您的后续操作-这取决于您想要使用哪些API功能。如果您使用新的ADT插件,则选择Nexus 7或Galaxy Nexus配置文件。我个人使用2.2和4.1.x进行测试。有关更多信息,请浏览此页面:http://developer.android.com/tools/devices/index.html。 - A--C

1

这次你从A-C那里得到了答案,但在下一次Android应用程序开发中,有一个重要的建议:

始终查看错误日志(logcat),并查看“Caused by:”标签,它可以详细说明问题的原因。同时查看导致该错误的代码行号,并尝试找出该行代码可能存在的问题。

例如:在您的错误日志中显示-

Caused by: java.lang.ClassCastException: android.widget.TextView cannot be cast to android.widget.Button 
at tutorial.example.tutorial.Startingpoint.onCreate(Startingpoint.java:22)

所以,你可以尝试阅读日志,你将会理解,在你的文件Startingpoint.java中,在onCreate方法中的第22行出现了错误android.widget.TextView cannot be cast to android.widget.Button。所以,你可以轻松地消除你的错误,无需任何帮助。希望这不仅能解决你当前的问题,也能节省你未来的时间和精力。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接