2011-01-27 2 views
1

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

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.

+0

Не можете вы Java Preferences пакет подкрепленную постоянное хранилище вместо вашего пользовательского класса предпочтений? – CoolBeans

+0

Как я могу использовать пакет Java Preferences? Извините, я просто новичок на android .. – sean

+0

Не могли бы вы отправить какой-то код и сообщение об ошибке, если оно появилось? Это поможет лучше понять вашу точную проблему. –

ответ

6

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

if(password=="") 

с

if("".equals(password)) 

и

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

с

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

EDIT
Причина, по которой вам нужно внести эти изменения, заключается в том, что (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); 
+0

в случае 'password ==" "' return null, это также пропустит часть else? –

+0

'password ==" "' возвращает либо 'true', либо' false', а не 'null'. Возможно, вы имеете в виду, если 'password' ** является **' null'? Если это так, то и исходный тест, и моя предложенная замена вернут 'false'. –

+0

Я думаю, что метод startMain() всегда вызывается, не зависящий от того, что возвращает 'password =" "', так что на самом деле неправильное сравнение строк не может быть решением в этом случае, правильно? –