1

У меня есть 6 текстовых полей, и я пытаюсь ввести их в базу данных sqlite, и я пытаюсь разобрать 5 из них в двойные, но это бросает эту ошибку, и я не могу понять, что делать. Я попытался использовать valueOf(String) и разбор, но ни один из них не работает.java.lang.NumberFormatException: Invalid double: "" Редактировать текст

Я использовал Лонг и типа Integer, а также, и пришел к тому же самому вопросу, а

Вот код:

public class EditClass extends AppCompatActivity { 

EditText name, exam, quiz, assignment, participation, lab; 
String iName, sExam, sQuiz, sAss, sPart, sLab ; 
double iExam, iQuiz, iLab, iAss, iPart; 
FloatingActionButton fab; 
Database database; 


@TargetApi(Build.VERSION_CODES.JELLY_BEAN) 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_edit_class); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 


    name = (EditText) findViewById(R.id.class_name); 
    exam = (EditText) findViewById(R.id.exam_weight); 
    quiz = (EditText) findViewById(R.id.quiz_weight); 
    assignment = (EditText) findViewById(R.id.assignment_weight); 
    participation = (EditText) findViewById(R.id.participation_weight); 
    lab = (EditText) findViewById(R.id.lab_weight); 

    iName = name.getText().toString(); 
    sExam = exam.getText().toString(); 
    sQuiz = quiz.getText().toString(); 
    sAss = assignment.getText().toString(); 
    sPart = participation.getText().toString(); 

    ImageView create = new ImageView(this); 
    create.setImageDrawable(getResources().getDrawable(R.drawable.checkmark)); 

    fab = new FloatingActionButton.Builder(this).setContentView(create).build(); 
    fab.setBackground(getResources().getDrawable(R.drawable.button_action_lightblue_ztek)); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

    addData(); 
} 

public void addData(){ 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      try { 

       /** 
       * Errors with parsing into integer form, comes up with NumberFormatException 
       */ 
       database.insertData(iName, 
         iExam = Double.valueOf(sExam), 
         iQuiz = Double.valueOf(sQuiz), 
         iLab = Double.valueOf(sLab), 
         iAss = Double.valueOf(sAss), 
         iPart = Double.valueOf(sPart)); 

         Toast.makeText(EditClass.this, "Data was Successfully Inserted", Toast.LENGTH_SHORT).show(); 

      }catch (Exception e){ 
       String error= e.toString(); 
       Toast.makeText(EditClass.this, "Data was Not Inserted", Toast.LENGTH_SHORT).show(); 
       System.out.println(error); 

      } 
     } 
    }); 
}} 

Я теперь в конечном итоге изменить метод AddData к этому , но теперь оно появляется как null, как для строки, так и для double.

Вот метод:

public void addData(){ 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      try { 
       /** 
       * Errors with parsing into integer form, comes up with NumberFormatException 
       */ 
       database.insertData(name.getText().toString(), 
         Double.parseDouble(exam.getText().toString()), 
         Double.parseDouble(quiz.getText().toString()), 
         Double.parseDouble(lab.getText().toString()), 
         Double.parseDouble(assignment.getText().toString()), 
        Double.parseDouble(participation.getText().toString())); 


         Toast.makeText(EditClass.this, "Data was Successfully Inserted", Toast.LENGTH_SHORT).show(); 

      }catch (Exception e){ 
       String error= e.toString(); 
       Toast.makeText(EditClass.this, "Data was Not Inserted", Toast.LENGTH_SHORT).show(); 
       System.out.println(error); 

      } 



     } 
    }); 
} 
+0

Вы уверены, что в ваших полях есть 'double's only? –

+0

У ваших парных разрядов есть запятая или точка? –

+0

Вы должны проверить свои поля перед вызовом 'Double.valueOf' для полей –

ответ

1

onCreate() запускается только один раз, и в настоящее время является единственным местом, вы звоните getText(). Поэтому значения в iName, sExam и т. Д. - все значения по умолчанию, которые у вас есть для этих полей, а не текущие значения при нажатии на ваш FloatingActionButton.

Вместо этого переместите iName = name.getText().toString(); и т. Д. Строки в ваш OnClickListener, чтобы получить текущие значения при нажатии кнопки.

Также обратите внимание, что вы не можете использовать Double.valueOf() на пустом поле (это NumberFormatException вы получаете) - рассмотреть оборачивать каждый вызов в TextUtils.isEmpty(), чтобы проверить, есть ли какое-либо значение вообще.