Диалог Java / Android с EditText - логическая проверка строк - PullRequest
0 голосов
/ 08 января 2011

У меня есть логический метод, возвращающий true или false, чтобы проверить, существуют ли данные внутри строк.Все работает нормально, если пользователь вводит все данные или не запускается через диалоги ..... НО .... если пользователь НЕ вводит данные во всплывающем окне диалога "getItemsEditText" И все еще нажимает "ОК", это логическое значениеразрешается в true, хотя "pricePerItemText" еще ничего не хранит.Это логический метод:

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

Здесь тестируется логическое значение, чтобы узнать, является ли оно истинным или ложным:

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

}

Вот как происходит диалог с EditText и OK / CancelНа кнопках написано:

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

Есть ли другой способ сделать это?Почему пользователь все еще может нажать «ОК», если он вообще ничего не вводил?Есть идеи?Спасибо, ребята!

1 Ответ

1 голос
/ 08 января 2011

Вы отправили слишком много кода.Но сразу же я заметил это

pricePerItemText != ""

Предполагая, что pricePerItemText является строкой, о которой мы действительно понятия не имеем, так как вы ее не включили, вы не сравниваете строки в Java.Он должен быть

!pricePerItemText.equals("");

Редактировать :

В Java оператор == сравнивает ссылки на объекты, а не значения.Так что

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

никогда не будет печатать true, потому что переменная mytext указывает на какую-то область памяти, которая, безусловно, не совпадает с той, на которую указывает «текст».то, что

"text == "text"

истинно, является артефактом Java, хранящим пул строк, поэтому ему не нужно перераспределять новые строки.Это основная причина путаницы.

Вот случайная ссылка, которая описывает ее, вероятно, лучше

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

...