Ich habe eine boolesche Methode, die true oder false zurückgibt, um zu überprüfen, ob Daten innerhalb von Strings existieren oder nicht. Alles funktioniert in Ordnung, wenn der Benutzer alle Daten eingibt oder die Dialoge nicht durchläuft ..... ABER .... wenn der Benutzer keine Daten in das "getItemsEditText" -Dialogfenster eingibt UND weiterhin auf "OK" klickt, ist dieser Boolesche Wert Auflösen nach True, obwohl "pricePerItemText" immer noch nichts gespeichert hat. Dies ist die Boolesche Methode:Java/Android Dialog mit EditText - Boolesche Überprüfung von Strings
public Boolean doesAllDataExistCheckBool()
{
if (pricePerItemText != "" && itemsPerDayText != "" && sleepTimeText != "" &&
wakeTimeText != "")
{
SharedPreferences.Editor editor = mySharedPreferences.edit
(); //opens shared preference editor
editor.putBoolean("storedDoesAllDataExist", true);
editor.commit(); //commit changes to mySharedPreferences
//End storing shared preferences
return true;
}
else
{
SharedPreferences.Editor editor = mySharedPreferences.edit
(); //opens shared preference editor
editor.putBoolean("storedDoesAllDataExist", false);
editor.commit(); //commit changes to mySharedPreferences
//End storing shared preferences
return false;
}
}
Hier ist, wo die boolean wenn sie wahr oder falsch, um zu sehen getestet wird:
if (position == 4)
{
allDataExists = doesAllDataExistCheckBool(); //checks if true or false
if (serviceStarted == true)
{
Context context = getApplicationContext();
String text = "Schedule is already running";
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
}
if (serviceStarted == false && doesAllDataExistCheckBool() == true)
{
startScheduleService();
}
if (serviceStarted == false && doesAllDataExistCheckBool() == false)
{
Context context = getApplicationContext();
String text = "Please enter all data before starting!";
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
}
}
Hier ist, wie der Dialog mit EditText und OK/Abbrechen Tasten geschrieben:
case ITEMS_PER_DAY :
LayoutInflater li = LayoutInflater.from(this);
final View itemsEntryView = li.inflate(R.layout.settings_dialog_input, (ViewGroup)
findViewById(R.id.layout_root));
final EditText getItemsEditText = (EditText)itemsEntryView.findViewById
(R.id.DialogEditText);
return new AlertDialog.Builder(SettingsActivity.this)
.setTitle("This is the title")
.setView(itemsEntryView)
.setPositiveButton("Ok", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int whichButton)
{
itemsPerDayText = getItemsEditText.getText().toString(); //gets input from
edittext and saves it to a string itemsPerDayText
//Initialize shared preferences
SharedPreferences.Editor editor = mySharedPreferences.edit(); //opens editor
editor.putString("storedItemsPerDayText", itemsPerDayText);
editor.commit(); //commit changes to mySharedPreferences
//End storing shared preferences
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int whichButton)
{
//user click cancel
}
}).create();
Gibt es eine andere Möglichkeit, dies zu tun? Warum kann der Benutzer immer noch auf "OK" klicken, wenn er überhaupt nichts eingegeben hat? Irgendwelche Ideen? Danke Leute!
Dank Falmarri wahrscheinlich besser beschreibt. Entschuldigung für die Veröffentlichung dieses Codes. Ich wollte nur sichergehen, dass jeder, der es ansieht, logischerweise alles durchgehen könnte. Ich wusste, dass es etwas Dummes war. Ja, das weißt du wahrscheinlich schon. Ich bin ein Java NOOB. – dell116
@ dell116: Es ist immer ein Kompromiss zwischen zu viel und zu wenig Code zu schreiben. Im Idealfall sollten Sie das kleinste bisschen kompilierbaren Code veröffentlichen, der das Problem veranschaulicht. Es ist jedoch schwierig mit Android. – Falmarri
und nur um klar zu sein .... Obwohl ich in meinem Code nicht explizit gezeigt habe, dass PricePerItemText eine Zeichenfolge ist, habe ich angegeben, dass ich Strings in meiner Beschreibung getestet habe. – dell116