2016-03-16 2 views
0

Привет Я беру значение из edittext и преобразую его, отображая это значение в другом тексте, но получая ошибку времени выполнения java.lang.NumberFormatException: Недопустимый double: "" .at java.lang.StringToReal.invalidReal. В моем setAdapter он принимает только franheit, что означает только todetails. Я не понял, где ошибка являетсяjava.lang.NumberFormatException: Invalid double: "" at java.lang.StringToReal.invalidReal

public class UniqueConverter extends Fragment { 

    private Spinner fromDetails, toDetails; 
    private EditText fromInput, toInput; 
@Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_uniquelayout, container, false); 
onInitVies(view); 
     int position = getArguments().getInt("position"); 
     String ifrom,rto; 
     Double inp; 
     double out = 0; 

     switch (position) { 
      case 0: 
       setAdapter(temperatureform, "Celsius", "Fahrenheit"); 
       ifrom = (String) fromDetails.getSelectedItem(); 
       rto = (String) toDetails.getSelectedItem(); 
       inp = Double.valueOf(fromInput.getText().toString()); 
       TemperatureConverter con = new TemperatureConverter(); 
       TemperatureConverter.Units fromUnit = TemperatureConverter.Units.fromString(ifrom); 
       TemperatureConverter.Units toUnit = TemperatureConverter.Units.fromString(rto); 
       out = con.TemperatureConvert(fromUnit,toUnit,inp); 
       break; 
      case 1: 
       setAdapter(weightform, "Kilograms", "Grams"); 
       ifrom = (String) fromDetails.getSelectedItem(); 
       rto = (String) toDetails.getSelectedItem(); 
       inp = Double.valueOf(fromInput.getText().toString()); 
       WeightConverter converter = new WeightConverter(); 
       WeightConverter.Inus fromInus = WeightConverter.Inus.fromString(ifrom); 
       WeightConverter.Inus toInus = WeightConverter.Inus.fromString(rto); 
       out = converter.WeightConvert(fromInus, toInus, inp); 
       break; 

    final double finalOut = out; 
     fromInput.addTextChangedListener(new TextWatcher() { 
       @Override 
       public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

       } 

       @Override 
       public void onTextChanged(CharSequence s, int start, int before, int count) { 

       } 

       @Override 
       public void afterTextChanged(Editable s) { 

        if (!fromInput.getText().toString().equals("")) 
        { 
         toInput.setText(String.valueOf(finalOut)); 
        } 
        else 
        { 
         toInput.setText(""); 
        } 

       } 
      }); 


      return view; 

    } 


    private void setAdapter(String[] spinnerItems, String fromDefaultText, String toDefaultText) { 
     fromDetails.setAdapter(new CustomSpinnerAdapter(getContext(), R.layout.spinner_item, spinnerItems, fromDefaultText)); 
     toDetails.setAdapter(new CustomSpinnerAdapter(getContext(), R.layout.spinner_item, spinnerItems, toDefaultText)); 
    } 

    private void onInitVies(View view) { 
     fromDetails = (Spinner) view.findViewById(R.id.fromSpinner); 
     toDetails = (Spinner) view.findViewById(R.id.toSpinner); 

     fromInput = (EditText) view.findViewById(R.id.fromInput); 
     toInput = (EditText) view.findViewById(R.id.toInput); 
    } 

LogCat:

Process: com.cloudicalabs.converters, PID: 8063 
03-16 03:47:54.078 8063-8063/com.cloudicalabs.converters E/AndroidRuntime: java.lang.NumberFormatException: Invalid double: "" 
03-16 03:47:54.078 8063-8063/com.cloudicalabs.converters E/AndroidRuntime:  at java.lang.StringToReal.invalidReal(StringToReal.java:63) 
03-16 03:47:54.078 8063-8063/com.cloudicalabs.converters E/AndroidRuntime:  at java.lang.StringToReal.parseDouble(StringToReal.java:267) 
03-16 03:47:54.078 8063-8063/com.cloudicalabs.converters E/AndroidRuntime:  at java.lang.Double.parseDouble(Double.java:301) 
03-16 03:47:54.078 8063-8063/com.cloudicalabs.converters E/AndroidRuntime:  at java.lang.Double.valueOf(Double.java:338) 
03-16 03:47:54.078 8063-8063/com.cloudicalabs.converters E/AndroidRuntime:  at com.cloudicalabs.converters.fragments.UniqueConverter.onCreateView(UniqueConverter.java:74) 
03-16 03:47:54.078 8063-8063/com.cloudicalabs.converters E/AndroidRuntime:  at android.support.v4.app.Fragment.performCreateView(Fragment.java:1962) 
03-16 03:47:54.078 8063-8063/com.cloudicalabs.converters E/AndroidRuntime:  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067) 
03-16 03:47:54.078 8063-8063/com.cloudicalabs.converters E/AndroidRuntime:  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1248) 
03-16 03:47:54.078 8063-8063/com.cloudicalabs.converters E/AndroidRuntime:  at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738) 
+0

Вы можете отправить строку с ошибкой 74 @sun – RushDroid

+0

Если ваша строка пуста или равна нулю, вы получите ошибку NumberFormateExaception. Поэтому перед преобразованием строки в float или double вы проверите, что ваша строка пуста или нет. –

+0

inp = Double.valueOf (fromInput.getText(). ToString()); это моя строка ошибки – sun

ответ

2
try { 
    inp = Double.valueOf(fromInput.getText().toString()); 
} catch (NumberFormatException e) { 
    inp = 0; 
} 
+1

Я попробовал, но он обнаружил ошибку разрешения. – sun

+0

Покажите мне трассировку стека –

2

Попробуйте заменить эту строку

inp = Double.valueOf(fromInput.getText().toString()); 

с

inp = Double.parseDouble(fromInput.getText().toString()); 
+0

возникла проблема с моим адаптером setAdapter, который принимает только todetails, означает, что он принимает faranheit во время отладки. – sun

+0

Я не понял, что вы пытаетесь сказать. –

+0

мои прядильщики принимают одинаковое значение – sun

0

Ваша проблема в том, что переменная или ресурс, из которых вы хотите получить значение, является нулевым, и поэтому он говорит, что «» не является двойным. Если вы получаете значение от fromInput.getText().toString(), то fromInput не имеет значения и, следовательно, значение null не может быть переведено в double.

+0

он делает это в функции initViews(); он получил бы NPE свои основы :) @Parsania Hardik – DJphy

+0

ohh да. Ты прав :) –

0
@Override 
public void afterTextChanged(Editable s) { 

    if (!TextUtils.isEmpty(fromInput.getText()) 
    { 
     String value=null; 
     try { 
      value=String.valueOf(Double.parseDouble(fromInput.getText().toString())); 
      toInput.setText(value); 
     } catch (NumberFormatException e) { 
      e.printStackTrace(); 
      toInput.setText(""); 
     } 
    } 
    else 
    { 
     toInput.setText(""); 
    } 
} 
0

, прежде чем делать это

inp = Double.valueOf(fromInput.getText().toString()); 

проверить, является ли значение из текста fromInput оказывает «» (пустая -ie не держит ничего: говорят, как .Length == 0), то и не разобрать Это; вместо этого уведомите пользователя о вводе некоторого значения. тоже положить в попытке поймите.

Смежные вопросы