К сожалению приложение перестало работать

Я новичок в разработке приложений для Android. Я делал это обучающее приложение. Оно очень простое. Он добавляет один и вычитает один из счетчика. Когда я запускаю его в эмуляторе, он говорит: «К сожалению, учебник перестал работать». Ошибок в коде нет. Уровень 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>

Вот логкэт:

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

person user2125722    schedule 02.03.2013    source источник
comment
В следующий раз просто разместите свой код здесь и с правильным форматированием. Код с двойным интервалом (по крайней мере, для меня) менее читаем.   -  person A--C    schedule 02.03.2013
comment
В коде нет ошибок. — я думаю, вы имеете в виду отсутствие ошибок компиляции. Ясно, что была как минимум одна ошибка.   -  person Stephen C    schedule 02.03.2013


Ответы (2)


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

должно быть

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

Так как display должен ссылаться на экземпляр TextView, но вы явно приводите к Button, а это не совместимые типы.

person A--C    schedule 02.03.2013
comment
Спасибо, сработало!! Кроме того, какое устройство выбрать при создании нового виртуального устройства Android? Мне это кажется довольно запутанным. - person user2125722; 02.03.2013
comment
@ user2125722 рад слышать, что это сработало! Поскольку вы новичок и ваша проблема фактически решена, убедитесь, что вы прочитали как работает ли принятие ответа? так что вы понимаете, как работает принятие. Что касается вашего продолжения - это зависит от того, какие функции API вы хотите использовать. Я говорю, что выберите профили Nexus 7 или Galaxy nexus, если вы используете новый плагин ADT. Я лично использую 2.2 и 4.1.x для тестирования. Чтобы получить дополнительную информацию, просмотрите это. - person A--C; 02.03.2013

На этот раз вы получили ответ от AC, но в следующий раз при разработке приложений для Android важное предложение:

Всегда смотрите logcat на предмет ошибки и смотрите тег «Вызвано:». В нем достаточно подробно указывается причина проблемы. Также смотрите строку no, вызвавшую эту ошибку. И попытайтесь найти, что может быть не так с этой строкой кода.

Например: в вашем логарифме это показывает-

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 по адресу line 22, который находится в методе onCreate, ошибка android.widget.TextView cannot be cast to android.widget.Button. Таким образом, вы можете легко удалить свои ошибки без посторонней помощи. Надеюсь, что это поможет не только вам решить текущую проблему, но и предотвратит ваше будущее время и усилия.

person shridutt kothari    schedule 02.03.2013