开发者

Java /Android Dialog with EditText - Boolean check on strings

I have a boolean method returning true or false to check whether or not data exists inside of strings. Everything works ok if the user enters all data or does not run through the dialogs.....BUT....if the user DOES NOT enter data in the "getItemsEditText" dialog popup AND still clicks "OK", this boolean is resolving to true, even though "pricePerItemText" still has nothing stored. This is the boolean method:

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
    {
  开发者_如何学JAVA      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;
    }
}

Here is where the boolean is being tested to see if true or false:

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();
     }

}

Here is how the dialog with EditText and OK/Cancel buttons is written:

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();

Is there another way to do this? Why can the user still click "OK" if they did not enter anything at all? Any ideas? Thanks guys!


You posted way too much code. But right away I noticed this

pricePerItemText != ""

Assuming pricePerItemText is a string, which we really have no idea since you didn't include that, that's not how you compare strings in java. It needs to be

!pricePerItemText.equals("");

Edit:

In java, the == operator compares objects references, not values. So

String mytext = "text";
if (mytext == "text"){ print "True"}

will never print true because the mytext variable is pointing to some memory location, which is most definitely not the same as where "text" points to.

The fact that

"text == "text"

is true is a an artifact of Java keeping a string pool so it doesn't have to reallocate new strings. This is a major cause of confusion.

Here's a random link which describes it probably better

http://leepoint.net/notes-java/data/expressions/22compareobjects.html

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜