Класс SharedPreferences - PullRequest
       3

Класс SharedPreferences

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

Я создаю приложение, которое просит первого пользователя ввести пароль. Однако всякий раз, когда я нажимаю кнопку «Отправить», приложение останавливается, и я думаю, что это из-за класса, который я сделал для него SharedPreferences. Я не знаю, что положить в класс. Нужна помощь, пожалуйста. Спасибо

package com.android.steg;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class Password extends Activity implements OnClickListener
{
Button submitButton;
EditText passwordEditText;
private SharedPreferences SharedPreference;
public static final String PREFS_PRIVATE = "PREFS_PRIVATE";
public static final String KEY_PRIVATE = "KEY_PRIVATE";
public static final String PREFS_READ = "PREFS_READ";
public static final String KEY_READ = "KEY_READ";
public static final String PREFS_WRITE = "PREFS_WRITE";
public static final String KEY_WRITE = "KEY_WRITE";
public static final String PREFS_READ_WRITE = "PREFS_READ_WRITE";
public static final String KEY_READ_WRITE = "KEY_READ_WRITE";



public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.pass);
    Button submitButton = (Button) findViewById(R.id.submitButton);
    submitButton.setOnClickListener(this);
}

public void onClick(View v)
{ 
    EditText passwordEditText = (EditText) findViewById(R.id.passwordEditText);
    SharedPreferences prefs = this.getApplicationContext().getSharedPreferences("prefs_file",MODE_PRIVATE);
    String password = prefs.getString("password","");
    if(password=="")
    {
        Editor edit = prefs.edit();
        edit.putString("password",passwordEditText.getText().toString());
        edit.commit();
        StartMain();
    }
    else
    {
        if(passwordEditText.getText().toString()== password)
        {
             StartMain();
        }
    }

}

public void StartMain()
{
     Intent intent = new Intent(this, MainActivity.class);
     startActivity(intent);
}
 }

Всякий раз, когда я нажимаю кнопку отправки, он не отправляет меня на запуск класса MainActivity.

1 Ответ

6 голосов
/ 27 января 2011

Вы неправильно сравниваете Strings.Заменить

if(password=="")

на

if("".equals(password))

и

if(passwordEditText.getText().toString()== password)

на

if(passwordEditText.getText().toString().equals(password))

РЕДАКТИРОВАТЬ
Причина, по которой вам необходимо внести эти изменения, заключается в том, что (password=="") всегда будет false, поэтому блок else всегда будет выполняться.В блоке else единственным тестом является (passwordEditText.getText().toString()== password), и это будет , а также всегда будет false.Таким образом, оба вызова StartMain() находятся в недостижимых кодовых блоках и никогда не выполняются.Вы можете легко продемонстрировать это, поместив несколько строк Log.d("MY_TAG","message goes here"); в различные блоки if и else.

EDIT 2
Ah.Woops.Есть еще одна проблема с кодом, на которую я был ослеплен очевидностью проблемы сравнения String.Вы путаете сферу действия вашего объявления кнопки.Сначала вы определяете его для класса:

Button submitButton;

. Переопределите его в onCreate():

Button submitButton = (Button) findViewById(R.id.submitButton);

Измените эту последнюю строку на:

submitButton = (Button) findViewById(R.id.submitButton);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...