如何解决NumberFormatException:空字符串,而在android中工作而不使用任何try and catch异常处理程序?

时间:2019-04-24 02:29:08

标签: java android

运行此程序时,我在线程“ main”中收到错误Exception java.lang.NumberFormatException:空字符串。有可能使 我们可以将diff项目导入单个项目吗? 当我运行此程序时,在线程“ main” java.lang.NumberFormatException中得到错误Exception:空字符串。有可能让这个烦恼

package com.example.nav1;

import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.TextView;

public  class SgpaActivity extends Fragment  {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable 
ViewGroup container, @Nullable Bundle savedInstanceState) {

    View rootview = inflater.inflate(R.layout.activity_sgpa, container, 
false);
 //       onButtonClick(view);

    EditText e1,e2,e3,e4,e5,e6 =null;
    e1 = e2 =e3 = e4 =e5 =e6;
    TextView t1 = null;
    float num1=0;
    e1 =  rootview.findViewById(R.id.e1);
    e2 = rootview.findViewById(R.id.e2);
    e3 = rootview.findViewById(R.id.e3);
    e4 = rootview.findViewById(R.id.e4);
    e5 = rootview.findViewById(R.id.e5);
    e6 = rootview.findViewById(R.id.e6);
    t1 = rootview.findViewById(R.id.result);
if(e1!=null)
    num1 = Float.parseFloat(e1.getText().toString());
    float num2 = Float.parseFloat(e2.getText().toString());
    float num3 = Float.parseFloat(e3.getText().toString());
    float num4 = Float.parseFloat(e4.getText().toString());
    float num5 = Float.parseFloat(e5.getText().toString());
    float num6 = Float.parseFloat(e6.getText().toString());
    float sum = 0;
    sum = (num1*25) + (num2*25) + (num3*25) + (num4*25) + (num5*23) + 
(num6*23) ;
    float cgpa = sum/(25+25+25+25+23+23);
    t1.setText(Float.toString(cgpa));

    return inflater.inflate(R.layout.activity_sgpa, container,false);
}

public void onButtonClick (View v)
{  // return inflater.inflate(R.layout.article_view, container, false);
}

}

I expect the output of 1 , 1, 1, 1, 1,1 be 1

4 个答案:

答案 0 :(得分:0)

在这种情况下,如果您在片段内的按钮上使用android:onClick属性,则需要在调用活动内定义函数。

如此处建议:- onClick attribute in fragment

尝试为按钮实现OnClickListner。

在方法中,在设置答案之前进行所有验证。

如前面注释中所述,如果会引发异常:-

  

NullPointerException-如果字符串为空

     

NumberFormatException-如果字符串不包含可解析的浮点数。

如何避免这种情况:-

  1. 您可以使用here指定的回归检查。
  2. 如果可以使用double可以,请尝试以下操作:-Doubles.tryParse(String) 由Google的Guava库提供,为here回答。
  3. 或者,而不是一遍又一遍地检查,您可以通过以下操作直接尝试设置允许在编辑文本中输入的数字:-

    android:digits="0123456789."

link很少有很好的答案。

答案 1 :(得分:0)

首先使用TextUtils.isEmpty()检查您的字符串是否不为空,如果字符串不为空,则使用正则表达式检查其中是否包含有效的浮点数据。

if(!TextUtils.isEmpty(e1.getText().toString())){
    if (text.matches("[0-9]*\\.?[0-9]+") {
        num1 = Float.parseFloat(e1.getText().toString());
    } else {
        //Toast invalid number
    }
}

答案 2 :(得分:0)

我会用trycatch块包围它。这样做的原因是因为该字符串可能不是 null ,但是可能为空,或者您找到的字符不是数字。因此:

try{
   float something = Float.parseFloat(e1.getText().toString());
}catch(NumberFormatException e){
   e.printStackTrace();
}catch(NullPointerException e){
  e.printStackTrace();
}

那是因为您不需要询问它是否为 null ,它是否为空或是否不包含字符。

答案 3 :(得分:-1)

我认为错误是

num1 = Float.parseFloat(e1.getText().toString());

因为

e1.getText().toString()为空。