Сравнение, включающее неудачу предпочтений после первого раза - PullRequest
0 голосов
/ 29 ноября 2011

Совершенно новый для кодирования для Android, но эта проблема заставляет меня рвать на себе волосы, потому что, кажется, не имеет никакого смысла вообще ...

У меня есть действие с четырьмя элементами формы в макете: CheckBox, два EditTexts и Button.

Когда пользователь нажимает кнопку, он сохраняет содержимое EditTexts в виде двух значений предпочтения.

Когда пользователь нажимает флажок, он делает следующее:Если флажок установлен, загрузите настройки и сохраните их в две переменные.Проверьте, содержат ли эти переменные пустые строки после обрезки.Если это так, покажите сообщение об ошибке, в противном случае отобразите сообщение об успехе.

По сути, два текстовых поля используются для установки пары предпочтений, которые не должны быть пустыми при установке флажка.

Кажется, работает нормально, если я нажимаю на флажок перед нажатием кнопки - сообщение об ошибке или сообщение об успехе отображаются соответствующим образом.

Если я нажимаю кнопку сохранения, а затем нажимаю флажок, оно всегда показывает сообщение об успехе, независимопредпочтений.

Код следует (обрезается из программы в целом) ...

layout.xml

    <CheckBox android:id="@+id/cboxActive" android:text="Click me!" android:onClick="toggleActive" android:layout_width="wrap_content" android:layout_height="wrap_content" />

    <EditText android:id="@+id/editFrom" android:layout_width="fill_parent" android:layout_height="wrap_content" android:inputType="phone"><requestFocus /></EditText>

    <EditText android:id="@+id/editTo" android:layout_width="fill_parent" android:layout_height="wrap_content" android:inputType="phone"></EditText>

    <Button android:id="@+id/btnSave" android:onClick="savePrefs" android:text="Save" android:layout_width="120dp" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" />

</LinearLayout>

основной класс:

public class AutoMessengerActivity extends Activity 
{
SharedPreferences settings;
    CheckBox cboxActive;
    EditText editFrom, editTo;

    boolean active;
    String from, to;

    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        editFrom = (EditText) findViewById(R.id.editFrom);
        editTo = (EditText) findViewById(R.id.editTo);

        showPrefsInUI();
    }

    private void loadPrefs()
    {
        //Load preferences
        settings = getPreferences(MODE_PRIVATE);   
        from = settings.getString("from", "");
        to = settings.getString("to", "");

    }

    private void showPrefsInUI()
    {
        loadPrefs();

        //Set UI elements to preference values
        editFrom.setText(from);
        editTo.setText(to);   
    }


    public void savePrefs(View view) 
    {
        SharedPreferences.Editor editor = settings.edit();
        editor.putString("from", editFrom.getText().toString());
        editor.putString("to", editTo.getText().toString());

        editor.commit();

        Toast.makeText(this, "Prefs saved!", Toast.LENGTH_SHORT).show();
    }


    public void toggleActive(View view) 
    { 

        if (cboxActive.isChecked())
        {
        loadPrefs();

            //This toast is for debugging
            //It shows the correct data in all circumstances...
        Toast.makeText(this, "F: " + from + "   T: " + to, Toast.LENGTH_SHORT).show();

            //This is the part that seems to fail if you save then click checkbox
        if (from.trim() == "" || to.trim() == "")
        {           
            Toast.makeText(this, "Error - Prefs not saved", Toast.LENGTH_LONG).show();
            cboxActive.setChecked(false);
        }
        else
        {
            Toast.makeText(this, "Success!", Toast.LENGTH_SHORT).show();
        }

        }
        else
        {
        Toast.makeText(this, "Unchecked!", Toast.LENGTH_SHORT).show();
        }

    }
}

Надеемся, что этот код дает представление о проблеме и позволяет ее тиражировать ...

1 Ответ

0 голосов
/ 30 ноября 2011

О боже, как глупо с моей стороны - Урбан и Джексавье ударили по голове гвоздем ... Я забыл об этой чертовой раздражающей причуде Явы!Изменил строку на

from.trim().equals("") || to.trim().equals("")

И все работает отлично!

Для чего бы это ни стоило, на самом деле HAD кратко приходил мне в голову, но это было в 2 часа ночи, когда я пытался на равных, и я запуталсяпотребовав Object в качестве параметра и в итоге указав ноль, а не "" - что не сработало ...

...