Я создаю приложение, которое запрашивает у первого пользователя пароль. Однако всякий раз, когда я нажимаю кнопку "Отправить", приложение останавливается, и я думаю, это из-за класса, который я сделал для него 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.
Вы не правильно сравниваете 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
.
РЕДАКТИРОВАТЬ 2
Ах. Woops. Существует дополнительная проблема с кодом, на который я был ослеплен очевидностью проблемы сравнения String
. Вы вводите в заблуждение объем объявления своей кнопки. Сначала вы определяете его для класса:
Button submitButton;
Вы переопределите его в onCreate()
:
Button submitButton = (Button) findViewById(R.id.submitButton);
Измените эту последнюю строку на:
submitButton = (Button) findViewById(R.id.submitButton);
password==""
возвращающего нуль, это также пропустило бы остальную часть?
password==""
возвращает либо true
либо false
, но не null
. Возможно , вы имели в виду , если password
является null
? Если это так, то и исходный тест, и предложенная мной замена вернут false
.