Android: la mia app si arresta in modo anomalo quando è presente un campo di testo vuoto

Ho un problema con il mio codice. Continua ad andare in crash quando ho un campo editText vuoto. Questo bit di codice si trova nelle impostazioni della mia app e funziona bene, ma quando c’è un campo vuoto si blocca il programma. Ecco il codice per questo. Per favore non essere duro perché è la mia prima app per Android. Quindi, se qualcuno sa come risolvere il problema del campo di testo vuoto, sarebbe molto apprezzato! (Qualsiasi altro commento su come migliorare l’app sarebbe di aiuto).

Saluti

package com.cleanyet.cyv100fp; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; public class sTasks extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.tasks); /*Sets Up the Variables*/ Button done = (Button) findViewById(R.id.done1); EditText t1 = (EditText)findViewById(R.id.tbTask1); EditText t2 = (EditText)findViewById(R.id.tbTask2); EditText t3 = (EditText)findViewById(R.id.tbTask3); EditText t4 = (EditText)findViewById(R.id.tbTask4); EditText t5 = (EditText)findViewById(R.id.tbTask5); String FILENAME1 = "stask1"; String FILENAME2 = "stask2"; String FILENAME3 = "stask3"; String FILENAME4 = "stask4"; String FILENAME5 = "stask5"; String task1 = null; String task2 = null; String task3 = null; String task4 = null; String task5 = null; String edit = "Edit Task"; /*Fixes the Blank Field bug*/ /*Sets up the file input*/ FileInputStream fis = null; /*Gets the tasks set previously*/ /*Task 1 set up*/ try { fis = openFileInput(FILENAME1); byte[] dataArray = new byte[fis.available()]; while (fis.read(dataArray) != -1){ task1 = new String(dataArray); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { fis.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (task1.toString().length() < 0) { task1.toString(); t1.setText(task1); } else { t1.setText(edit); } /*Task 2 set up*/ try { fis = openFileInput(FILENAME2); byte[] dataArray = new byte[fis.available()]; while (fis.read(dataArray) != -1){ task2 = new String(dataArray); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { fis.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (task2.toString().length() < 0) { task2.toString(); t2.setText(task2); } else { t2.setText(edit); } /*Task 3 set up*/ try { fis = openFileInput(FILENAME3); byte[] dataArray = new byte[fis.available()]; while (fis.read(dataArray) != -1){ task3 = new String(dataArray); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { fis.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (task3.toString().length() < 0) { task3.toString(); t3.setText(task3); } else { t3.setText(edit); } /*Task 4 set up*/ try { fis = openFileInput(FILENAME4); byte[] dataArray = new byte[fis.available()]; while (fis.read(dataArray) != -1){ task4 = new String(dataArray); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { fis.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (task4.toString().length() < 0) { task4.toString(); t4.setText(task4); } else { t4.setText(edit); } /*Task 5 set up*/ try { fis = openFileInput(FILENAME5); byte[] dataArray = new byte[fis.available()]; while (fis.read(dataArray) != -1){ task5 = new String(dataArray); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { fis.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (task5.toString().length() < 0) { task5.toString(); t5.setText(task5); } else { t5.setText(edit); } /*When changes have been made and done is clicked*/ done.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub /*Sets up the Variables*/ EditText t1 = (EditText)findViewById(R.id.tbTask1); EditText t2 = (EditText)findViewById(R.id.tbTask2); EditText t3 = (EditText)findViewById(R.id.tbTask3); EditText t4 = (EditText)findViewById(R.id.tbTask4); EditText t5 = (EditText)findViewById(R.id.tbTask5); String tasks1 = t1.getText().toString(); String tasks2 = t2.getText().toString(); String tasks3 = t3.getText().toString(); String tasks4 = t4.getText().toString(); String tasks5 = t5.getText().toString(); String FILENAME1 = "stask1"; String FILENAME2 = "stask2"; String FILENAME3 = "stask3"; String FILENAME4 = "stask4"; String FILENAME5 = "stask5"; String task1 = tasks1; String task2 = tasks2; String task3 = tasks3; String task4 = tasks4; String task5 = tasks5; String edit = "Go to settings to make this task."; if (t1 != null){ t1.setText(edit); /*t2.setText(edit); t3.setText(edit); t4.setText(edit); t5.setText(edit);*/ }; /*Put if statement here to catch the empty field*/ /*Makes The Changes to the Tasks*/ try { FileOutputStream fos1 = openFileOutput(FILENAME1, Context.MODE_PRIVATE); fos1.write(task1.getBytes()); fos1.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { FileOutputStream fos2 = openFileOutput(FILENAME2, Context.MODE_PRIVATE); fos2.write(task2.getBytes()); fos2.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { FileOutputStream fos3 = openFileOutput(FILENAME3, Context.MODE_PRIVATE); fos3.write(task3.getBytes()); fos3.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { FileOutputStream fos4 = openFileOutput(FILENAME4, Context.MODE_PRIVATE); fos4.write(task4.getBytes()); fos4.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { FileOutputStream fos5 = openFileOutput(FILENAME5, Context.MODE_PRIVATE); fos5.write(task5.getBytes()); fos5.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } startActivity(new Intent("com.checkin.cyv100fp.settings")); } }); } } 

 if (task1.toString().length() < 0) { task1.toString(); t1.setText(task1); } else { t1.setText(edit); } 

Quanto sopra non ha assolutamente senso.

In primo luogo task1 È una stringa quindi non è necessario chiamare toString() per convertirlo in uno.

In secondo luogo, l'istruzione condizionale ( if ) sta controllando per vedere se task1 ha una lunghezza inferiore a zero .... pensaci.

In terzo luogo, se ha una lunghezza imansible inferiore a zero, allora chiama nuovamente toString() su di esso (senza alcuna variabile per ricevere l'imansible meno di zero) e poi prova a impostare il testo di t1 EditText .

È probabile che la lettura dei file non vada a buon fine (probabilmente perché in seguito si salvano le stringhe solo nel metodo onClick(...) ). Poiché le stringhe dell'attività saranno null se la lettura del file fallisce, è necessario testare il null prima di provare ad usarle.

In altre parole lo stai facendo nel tuo codice ...

 String task1 = null; 

Per correggere il bit di codice che ho allegato all'inizio, usa ...

 if (task1 != null) { t1.setText(task1); } else { t1.setText(edit); } 

... ma soprattutto, assicurati che i tuoi file abbiano le stringhe che devi leggere.