
@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 – 按下退格键时应用程序崩溃所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)