При нажатии на кнопку приложение закрывается
У меня приложение для заказа кофе, при нажатии на кнопки + или - происходит вылет, ошибки при этом ни какой нет, я начинаю изучать, поэтому прошу мне помочь.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingTop="16dp"
android:paddingLeft="16dp"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:text="QUANTITY"
android:paddingTop="16dp"
android:paddingLeft="16dp"
android:textAllCaps="true" />
<Button
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_margin="8dp"
android:backgroundTint="#AFACAC"
android:onClick="increment"
android:text="+"
android:textColor="@color/black"
android:textSize="25sp" />
<TextView
android:id="@+id/price_text_view"
android:layout_below="@+id/price_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0"
android:textColor="#000000"
android:paddingTop="16dp"
android:paddingLeft="16dp"
android:textSize="16sp" />
<Button
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_margin="8dp"
android:backgroundTint="#AFACAC"
android:onClick="decrement"
android:text="-"
android:textColor="@color/black"
android:textSize="25sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:text="PRICE"
android:paddingTop="16dp"
android:paddingLeft="16dp"
android:textAllCaps="true" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:onClick="submitOrder"
android:text="Order"
android:paddingTop="16dp"
android:paddingLeft="16dp"
android:textAllCaps="true" />
</LinearLayout>
Вот лог ошибок
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.justjava, PID: 4797
java.lang.IllegalStateException: Could not execute method for android:onClick
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:390)
at android.view.View.performClick(View.java:6294)
at android.view.View$PerformClick.run(View.java:24770)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385)
at android.view.View.performClick(View.java:6294)
at android.view.View$PerformClick.run(View.java:24770)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
at com.example.justjava.MainActivity.display(MainActivity.java:51)
at com.example.justjava.MainActivity.increment(MainActivity.java:35)
at java.lang.reflect.Method.invoke(Native Method)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385)
at android.view.View.performClick(View.java:6294)
at android.view.View$PerformClick.run(View.java:24770)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
Ответы (2 шт):
Знаний у меня не больше чем у вас, но так как вы на этот вопрос вряд-ли получите ещё какие-то ответы, поэтому могу лишь предположить:
- Преобразуйте ваш
numberиз типа int в String при помощи методаString.valueof(object);Выглядеть это будет примерно так:quantityTextView.setText(" " +(String.valueof(number));
Прошу обратить внимание на код который подсвечен желтым цветом у вас, скорее всего проблема в нём, не рекомендую игнорировать предупреждения компилятора так как они бывают очень полезны при выявлении ошибок, и наличие их в вашем коде уже говорит от том что он "не так хорош" как должен быть.
- Заметил в вашем коде разметки xml отсутствие айди у нужного TextView, но в коде Main Activity он подсвечивается как имеющийся, но это скорее всего ваша ошибка при копировании кода, но на всякий случай проверьте этот момент.
Надеюсь мои скудные знания хоть немного вам помогли.
У тебя в логах все написано, смотри :
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
at com.example.justjava.MainActivity.display(MainActivity.java:51)
at com.example.justjava.MainActivity.increment(MainActivity.java:35)
В методе display, 51 строчка класса MainActivity ты пытаешься вызвать метод setText() у объекта в котором null. Это значит что в 50 строчке, когда ты искал TextView c id == qantity_text_view - то такой view не нашлось и у тебя там null. Тебе надо в разметку добавить TextView с этим id (я предполагаю что надо в самую верхнею TextView твоей xml добавить android:id="@+id/qantity_text_view")
