运行此程序时,我在线程“ 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
答案 0 :(得分:0)
在这种情况下,如果您在片段内的按钮上使用android:onClick
属性,则需要在调用活动内定义函数。
如此处建议:- onClick attribute in fragment
或
尝试为按钮实现OnClickListner。
在方法中,在设置答案之前进行所有验证。
如前面注释中所述,如果会引发异常:-
NullPointerException-如果字符串为空
NumberFormatException-如果字符串不包含可解析的浮点数。
如何避免这种情况:-
或者,而不是一遍又一遍地检查,您可以通过以下操作直接尝试设置允许在编辑文本中输入的数字:-
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)
我会用try
和catch
块包围它。这样做的原因是因为该字符串可能不是 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()
为空。