EditText到String

时间:2017-05-23 21:31:57

标签: android string nullpointerexception android-edittext

我有一个EditText,其中我得到了数字,需要将它们转换为float,但仍然会得到相同的错误 - Null Pointer Exception

这是我的代码:

public class Basic extends Fragment implements AdapterView.OnItemSelectedListener {

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {


        View view = inflater.inflate(R.layout.basic, container, false);
        Spinner spinnerLenght = (Spinner) view.findViewById(R.id.spinnerLenght);
        spinnerLenght.setOnItemSelectedListener(this);
        ArrayAdapter<String> lenghtAdapter;
        lenghtAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, getResources().getStringArray(R.array.basic_string_lenght));
        lenghtAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinnerLenght.setAdapter(lenghtAdapter);

        return view;
    }


    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        String itemLenght = parent.getItemAtPosition(position).toString();
        EditText editTextLenght = (EditText) view.findViewById(R.id.editTextLenght);
        float floatLenght;
        floatLenght = Float.parseFloat(editTextLenght.getText().toString());
        float result_mm = 0;
        if (itemLenght.equals("mm")){


            result_mm = floatLenght * 1000;
        }


        Toast.makeText(parent.getContext(), (int) result_mm, Toast.LENGTH_LONG).show();
    }




    @Override
    public void onNothingSelected(AdapterView<?> parent) {

    }
}

这是logcat:

E/AndroidRuntime: FATAL EXCEPTION: main
                                                                      Process: com.example.dusan.unit, PID: 5181
                                                                      java.lang.NullPointerException
                                                                          at com.example.dusan.unit.Basic.onItemSelected(Basic.java:46)
                                                                          at android.widget.AdapterView.fireOnSelected(AdapterView.java:956)
                                                                          at android.widget.AdapterView.access$200(AdapterView.java:49)
                                                                          at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:920)
                                                                          at android.os.Handler.handleCallback(Handler.java:733)
                                                                          at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                          at android.os.Looper.loop(Looper.java:157)
                                                                          at android.app.ActivityThread.main(ActivityThread.java:5356)
                                                                          at java.lang.reflect.Method.invokeNative(Native Method)
                                                                          at java.lang.reflect.Method.invoke(Method.java:515)
                                                                          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
                                                                          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
                                                                          at dalvik.system.NativeStart.main(Native Method)

我也在double上试过了。 我也遇到null = ""的问题 我读了很多关于此的内容但无法找到解决方案。

3 个答案:

答案 0 :(得分:0)

1)检查你是否写了editText的正确id; 2)从膨胀的布局中找到onCreateView中的editText,或者将布局视图作为类变量,然后在onItemClick中找到她的编辑文本

答案 1 :(得分:0)

主要问题

您使用的是错误的ID和类。

EditText editTextLenght = (EditText) view.findViewById(R.id.editTextLenght);

正确的ID为android.R.id.text1 正确的类是TextView

请参阅What is "android.R.layout.simple_list_item_1"?,因为这是您在适配器中设置的布局。

替代解决方案

如果问题是parent.getItemAtPosition(position).toString();,请不要使用它。

如果要访问适配器中的数据,请将其移动到可以使用成员变量访问的范围

public class Basic extends Fragment implements AdapterView.OnItemSelectedListener {

    private ArrayAdapter<String> lenghtAdapter;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.basic, container, false);
        Spinner spinnerLenght = (Spinner) view.findViewById(R.id.spinnerLenght);
        spinnerLenght.setOnItemSelectedListener(this);
        this.lenghtAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, getResources().getStringArray(R.array.basic_string_lenght));

然后,使用getItem方法而不是尝试查找视图

float floatLenght = Float.parseFloat(lenghtAdapter.getItem(position));

另外,请正确拼写长度

答案 2 :(得分:0)

查看主要(您问的)问题,您希望将number转换为float的{​​{1}}。

首先导入: EditText

import android.widget.EditText;

EditText editTextLenght = (EditText) View.findViewById(R.id.editTextLenght); floatLenght = Float.parseFloat(editTextLenght.getText().toString()); //this code used in java programs.in android you can use below try{ float floatLenght = Float.valueOf(editTextLenght.getText().toString()); } catch (NumberFormatException e) { e.printStackTrace(); } (第一个字母很小)是原始类型,float是用于从Float转换为string的包装类。 您不需要更改其他代码。