android – 按下退格键时应用程序崩溃

android – 按下退格键时应用程序崩溃,第1张

概述我正在尝试在构建 Android应用程序时学习java.我有一个没有按钮的积分计算器,它使用textchange监听器来计算总数.当按下退格键并且该框为空时它会崩溃.我尝试使用下面的代码验证(仅在字段上验证开始).但它不起作用.任何帮助将不胜感激. @Overrideprotected void onCreate(Bundle savedInstanceState) { super.on 我正在尝试在构建 Android应用程序时学习java.我有一个没有按钮的积分计算器,它使用textchange监听器来计算总数.当按下退格键并且该框为空时它会崩溃.我尝试使用下面的代码验证(仅在字段上验证开始).但它不起作用.任何帮助将不胜感激.

@OverrIDeprotected voID onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentVIEw(R.layout.activity_wwcalc);    etFat = (EditText)findVIEwByID(R.ID.editTextFat);    etFiber = (EditText)findVIEwByID(R.ID.editTextFiber);    etProtein = (EditText)findVIEwByID(R.ID.editTextProtein);    etCarbs = (EditText)findVIEwByID(R.ID.editTextCarbs);    tvTotal = (TextVIEw)findVIEwByID(R.ID.textVIEwPoints);    TextWatcher watcher = new TextWatcher() {        @OverrIDe         public voID afterTextChanged(Editable s) {            // Todo auto-generated method stub            if(isEmpty(etFat) == false){                intFat = Integer.parseInt(etFat.getText().toString());            }            else{                etFat.setText("0");                etFat.hasFocus();                return;            }            intProtein =   Integer.parseInt(etProtein.getText().toString());            intFiber = Integer.parseInt(etFiber.getText().toString());            intCarbs = Integer.parseInt(etCarbs.getText().toString());            calculate();        }        @OverrIDe        public voID beforeTextChanged(CharSequence s,int start,int count,int after) {            // Todo auto-generated method stub        }        @OverrIDe        public voID onTextChanged(CharSequence s,int before,int count) {            // Todo auto-generated method stub        }    };    etFat.addTextChangedListener(watcher);    etProtein.addTextChangedListener(watcher);    etFiber.addTextChangedListener(watcher);    etCarbs.addTextChangedListener(watcher);}@OverrIDepublic boolean onCreateOptionsMenu(Menu menu) {    // Inflate the menu; this adds items to the action bar if it is present.    getMenuInflater().inflate(R.menu.activity_wwcalc,menu);return true;}public voID calculate(){    //intTot = intFat + intCarbs + intFiber + intProtein;    intTot = (int) Math.ceil((intFat * (4/35)) + (intCarbs * (4/36.84)) - (intFiber* (4/50))+ (intProtein * (4/43.75)) ) ;    tvTotal.setText(Integer.toString(intTot));}private boolean isEmpty(EditText etText){ if(etText.getText().toString().trim().length() > 0 || etText.getText().toString().trim() != null)    return false; else   return true; }

}

谢谢大家的帮助.如果有人认为有更好的方式让我知道,我不确定它是不是最好的解决方案. conor建议的try catch捕获异常,然后只插入0 set焦点并选择0

try {                intFat = Integer.parseInt(etFat.getText().toString());            } catch (NumberFormatException e) {                // Todo auto-generated catch block                etFat.setText("0");                etFat.hasFocus();                etFat.selectAll();            }
解决方法 没有看到堆栈跟踪,很难知道,但无论如何我都要去刺它.

下面的isEmpty()函数允许在框仍然是emtpy时返回false.

etText.getText().toString().trim() != null

这意味着当您按退格键并清除该字段时它是空的,但您的功能表明它不是.然后是踢球者,当你的应用认为该字段不为空时,它试图解析内容的整数值(不存在).这种解析尝试会引发异常并导致应用崩溃.

我希望stacktrace能够显示应用程序崩溃在这一行

intFat = Integer.parseInt(etFat.getText().toString());

值得注意的是,你应该总是用try,catch块来包围Integer.parseInt()之类的调用.

希望有所帮助.

总结

以上是内存溢出为你收集整理的android – 按下退格键时应用程序崩溃全部内容,希望文章能够帮你解决android – 按下退格键时应用程序崩溃所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1126850.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存