【问题标题】:Results are not getting displayed after the button is pressed. Android app for calculating Tip按下按钮后未显示结果。计算小费的安卓应用
【发布时间】:2016-01-23 23:40:13
【问题描述】:

按下按钮后应用程序崩溃。

下面是堆栈跟踪:

FATAL EXCEPTION: FATAL EXCEPTION: main
Process: com.example.btyagi.tipcalculator, PID: 8357
android.content.res.Resources$NotFoundException: String resource ID #0x0
    at android.content.res.Resources.getText(Resources.java:312)
    at android.support.v7.widget.ResourcesWrapper.getText(ResourcesWrapper.java:52)
    at android.widget.TextView.setText(TextView.java:4417)
    at com.example.btyagi.tipcalculator.MainActivity$1.onClick(MainActivity.java:54)
    at android.view.View.performClick(View.java:5198)
    at android.view.View$PerformClick.run(View.java:21147)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:148)
    at android.app.ActivityThread.main(ActivityThread.java:5417)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

这是我的 Activity 类:

public class MainActivity extends AppCompatActivity {
    EditText totalBill;
    EditText totalTip;


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


        final EditText checkAmount = (EditText) findViewById(R.id.editText);
        final EditText noOfPeople = (EditText) findViewById(R.id.editText2);
        final EditText tipPercent = (EditText) findViewById(R.id.editText3);

        totalBill = (EditText) findViewById(R.id.editText4);
        totalTip = (EditText) findViewById(R.id.editText5);


        //TextView totalPerPerson = (TextView) findViewById(R.id.textView5);
        //TextView tipPerPerson = (TextView) findViewById(R.id.textView4);


        Button calculateButton = (Button) findViewById(R.id.button);
//        ArrayList<String> list = new ArrayList<String>();
//        ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,R.layout.support_simple_spinner_dropdown_item,list);


        // try {


        calculateButton.setOnClickListener(new View.OnClickListener() {


            @Override
            public void onClick(View v) {
                try {
                     int amount = Integer.parseInt(checkAmount.getText().toString());
                     int people = Integer.parseInt(noOfPeople.getText().toString());
                     int tip = Integer.parseInt(tipPercent.getText().toString());
                    totalBill.setText(new StringBuilder().append(amount).append(tip / 100 * amount).toString());
                    totalTip.setText(tip / 100 * amount);
                    // totalPerPerson.setText(totalBill.get/people);
                } catch (NumberFormatException ed) {
                    System.out.print("Not a number");
                }
            }
        });
//


    }
}

XML 文件内容:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="com.example.btyagi.tipcalculator.MainActivity">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:text="Check Amount"
            android:id="@+id/textView"
            android:layout_alignParentTop="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_marginTop="78dp" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:text="No. of People"
            android:id="@+id/textView2"
            android:layout_below="@+id/textView"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_marginTop="30dp" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:text="Tip %"
            android:id="@+id/textView3"
            android:layout_below="@+id/textView2"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_marginTop="29dp" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Calculate"
            android:id="@+id/button"
            android:layout_centerVertical="true"
            android:layout_centerHorizontal="true" />

        <EditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:inputType="numberDecimal"
            android:ems="10"
            android:id="@+id/editText"
            android:layout_above="@+id/textView2"
            android:layout_toRightOf="@+id/textView"
            android:layout_toEndOf="@+id/textView" />

        <EditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:inputType="number"
            android:ems="10"
            android:id="@+id/editText2"
            android:layout_above="@+id/textView3"
            android:layout_toRightOf="@+id/textView2"
            android:layout_toEndOf="@+id/textView2" />

        <EditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:inputType="numberDecimal"
            android:ems="10"
            android:id="@+id/editText3"
            android:layout_above="@+id/button"
            android:layout_toRightOf="@+id/textView"
            android:layout_toEndOf="@+id/textView" />

        <EditText
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:inputType="number"
            android:ems="10"
            android:id="@+id/editText4"
            android:layout_below="@+id/button"
            android:layout_alignRight="@+id/editText2"
            android:layout_alignEnd="@+id/editText2" />

        <EditText
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:inputType="number"
            android:ems="10"
            android:id="@+id/editText5"
            android:layout_below="@+id/editText4"
            android:layout_alignLeft="@+id/editText4"
            android:layout_alignStart="@+id/editText4" />

        <EditText
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:inputType="number"
            android:ems="10"
            android:id="@+id/editText6"
            android:layout_below="@+id/editText5"
            android:layout_alignRight="@+id/editText"
            android:layout_alignEnd="@+id/editText" />

        <EditText
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:inputType="number"
            android:ems="10"
            android:id="@+id/editText7"
            android:layout_below="@+id/editText6"
            android:layout_alignRight="@+id/editText6"
            android:layout_alignEnd="@+id/editText6" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:text="TipPerPerson"
            android:id="@+id/textView4"
            android:layout_alignBottom="@+id/editText7"
            android:layout_toRightOf="@+id/textView3"
            android:layout_toEndOf="@+id/textView3" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:text="TotalPerPerson"
            android:id="@+id/textView5"
            android:layout_alignBottom="@+id/editText6"
            android:layout_alignLeft="@+id/textView4"
            android:layout_alignStart

【问题讨论】:

  • 为什么你从不从你的布局中引用你的 EditText 视图?这不是用户输入值的地方吗?
  • Integer value in TextView的可能重复

标签: java android xml


【解决方案1】:

final变量只能被初始化一次

将您的 totalBilltotalTiptotalPerPerson TextViews(实际上在您的 xml 中有 EditTexts)更改为类变量,并将您的amountpeopletip 移动到点击监听器。

public class MainActivity extends AppCompatActivity {


   TextView totalBill;
   TextView totalTip;
   TextView totalPerPerson;

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


        TextView checkAmount = (TextView) findViewById(R.id.textView);
        TextView noOfPeople = (TextView) findViewById(R.id.textView2);
        TextView tipPercent = (TextView) findViewById(R.id.textView3);

        totalBill = (TextView) findViewById(R.id.textView7);
        totalTip = (TextView) findViewById(R.id.textView6);
        totalPerPerson = (TextView) findViewById(R.id.textView5);
        TextView tipPerPerson = (TextView) findViewById(R.id.textView4);


        Button calculateButton = (Button) findViewById(R.id.button);

       calculateButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try { 
                   int amount = Integer.parseInt(checkAmount.getText().toString());
                   int people = Integer.parseInt(noOfPeople.getText().toString());
                   int tip = Integer.parseInt(tipPercent.getText().toString());

                    totalBill.setText(new StringBuilder().append(amount).append(tip / 100 * amount).toString());
                    totalTip.setText(String.valueOf(tip / 100 * amount));
                    // totalPerPerson.setText(totalBill.get/people);
                } catch (NumberFormatException ex) {
                  System.out.print("Not a number");
                }
            }
        });

    }
}

【讨论】:

  • 非常感谢!!我忘记了我稍后在我的 XML 代码中更改了这些视图。我相信您的建议会解决我的问题。
  • 我已经在问题中加入了更改,正如你所建议的,但是在我点击计算按钮后应用程序崩溃了。
  • 您需要在 setText() 方法中将 int 转换为字符串:String.valueOf(yourInt)。我已经更新了我的答案。
【解决方案2】:

这一行

totalTip.setText(tip / 100 * amount);

应该这样说

totalTip.setText(String.valueOf(tip / 100 * amount));

原因是 setText(int resId) 是错误的方法,会抛出你得到的 Resources$NotFoundException

【讨论】:

  • 你明白了!感谢您的帮助!
  • 欢迎。如果此答案解决了您的问题,那么您可以通过答案左侧箭头下的复选标记接受它。
猜你喜欢
  • 2013-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-13
  • 2020-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多