Abdulrahman Abdulkarim
Abdulrahman Abdulkarim

Reputation: 132

Android: app crashing after button click

I new with android, I'm using Android Studio 2.2 for my coding and I'm trying to build my first app, basically the app doesn't do much or now, and then after adding a price method to the onClick method for my app, the app crashes whenever I click the button.

Below I have provided the error message and my own code.

The error message I get from my android studio is as copied from the logcat view:

10-06 09:46:00.338 30789-30789/com.example.abdulkarim.justjava E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.abdulkarim.justjava, PID: 30789
java.lang.IllegalStateException: Could not execute method for android:onClick
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293)
at android.view.View.performClick(View.java:4660)
at android.view.View$PerformClick.run(View.java:19445)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5603)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
at dalvik.system.NativeStart.main(Native Method)

 Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
at android.view.View.performClick(View.java:4660) 
at android.view.View$PerformClick.run(View.java:19445) 
at android.os.Handler.handleCallback(Handler.java:733) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:146) 
at android.app.ActivityThread.main(ActivityThread.java:5603) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:515) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099) 
at dalvik.system.NativeStart.main(Native Method) 

 Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x2
at android.content.res.Resources.getText(Resources.java:1431)
at android.support.v7.widget.ResourcesWrapper.getText(ResourcesWrapper.java:52)
at android.widget.TextView.setText(TextView.java:4954)
at com.example.abdulkarim.justjava.MainActivity.display(MainActivity.java:33)
at com.example.abdulkarim.justjava.MainActivity.submit(MainActivity.java:24)
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:515) 
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 
at android.view.View.performClick(View.java:4660) 
at android.view.View$PerformClick.run(View.java:19445) 
at android.os.Handler.handleCallback(Handler.java:733) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:146) 
at android.app.ActivityThread.main(ActivityThread.java:5603) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:515) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099) 
at dalvik.system.NativeStart.main(Native Method) 
10-06 09:47:13.823 30789-30789/? I/Process: Sending signal. PID: 30789 SIG: 9

Here is my MainActivity.java code

package com.example.abdulkarim.justjava;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

import java.text.NumberFormat;


public class MainActivity extends AppCompatActivity {

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

    /**
     * This method is called when the order button is clicked.
     */
    public void submit(View view){
        int numberOfCoffees = 2;
        display(numberOfCoffees);
        displayPrice(numberOfCoffees * 10);
    }

    /**
     * This method displays the given quantity on the screen
     */
    private void display(int number){
        TextView quantityTextView = (TextView) findViewById(R.id.quantity_text_view);
        quantityTextView.setText(number);
    }

    /**
     * This method displays the given price on the screen
     */
    private void displayPrice(int number){
        TextView priceTextView = (TextView) findViewById(R.id.price_text_view);
        priceTextView.setText(NumberFormat.getCurrencyInstance().format(number));
    }
}

and here is my layout code from main_activity.xml

    <?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:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    tools:context="com.example.abdulkarim.justjava.MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Quantity"
        android:textAllCaps="true"
        android:textSize="16sp"
        android:textColor="@android:color/darker_gray"
        android:layout_marginBottom="16dp"/>
    <TextView
        android:id="@+id/quantity_text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="0"
        android:textSize="16sp"
        android:textColor="@android:color/black"
        android:layout_marginBottom="16dp"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Price"
        android:textAllCaps="true"
        android:textSize="16sp"
        android:textColor="@android:color/darker_gray"
        android:layout_marginBottom="16dp"/>
    <TextView
        android:id="@+id/price_text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="$0"
        android:textSize="16sp"
        android:textColor="@android:color/black"
        android:layout_marginBottom="16dp"/>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Order"
        android:textAllCaps="true"
        android:textSize="16sp"
        android:onClick="submit"/>
</LinearLayout>

Please help me find the error in my code.

Upvotes: 1

Views: 161

Answers (4)

Ali Ahsan
Ali Ahsan

Reputation: 470

The issue is with following line of Display function because you cannot set integer to TextView by calling setText method but as a string.

quantityTextView.setText(number);

Kindly change this line with this

quantityTextView.setText(number+"");

Upvotes: 0

Heena Arora
Heena Arora

Reputation: 749

settext() method accepts string as a parameter. you can not directly pass any other datatype to it. To show any other data type in the textview you have to append it to the string using "+" operator:

Like : [textview].setText(""+integerValue);

  1. Here double quotation ("") is an empty string
  2. and (+) is an operator to append two values.
  3. integerValue can be anything like (1,2,3,4....) , which you want to display in textview

Upvotes: 0

user4696837
user4696837

Reputation:

Your problem is only in

 private void display(int number){
    TextView quantityTextView = (TextView)                                                                             findViewById(R.id.quantity_text_view);
    quantityTextView.setText(number);
}

Here you can't directly set number. Hare only string excepted. You can add empty string with number to solve this...

quantityTextView.setText(number+"");

and

NumberFormat.getCurrencyInstance().format(number)

return String so no need to add anything ...

Upvotes: 0

Anjali
Anjali

Reputation: 2535

you can not directly set integer to you Textview. Only String is allowed so update your method and it will work:

 /**
     * This method displays the given quantity on the screen
     */
    private void display(int number){
        TextView quantityTextView = (TextView) findViewById(R.id.quantity_text_view);
        quantityTextView.setText(number+"");
    }

    /**
     * This method displays the given price on the screen
     */
    private void displayPrice(int number){
        TextView priceTextView = (TextView) findViewById(R.id.price_text_view);
        priceTextView.setText(NumberFormat.getCurrencyInstance().format(number)+"");
    }

Upvotes: 1

Related Questions