1

初めてのユーザーにパスワードの入力を求めるアプリを作成しています。ただし、送信ボタンを押すたびにアプリケーションが停止し、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 クラスの開始に送られません。

4

1 に答える 1

6

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。そのため、への2つの呼び出しStartMain()は両方とも到達不能コードブロック内にあり、実行されることはありません。さまざまなブロックにたくさんのLog.d("MY_TAG","message goes here");線を入れることで、これを簡単に示すことができます。ifelse

編集2
ああ。うわー。String比較の問題の明白さによって私が知らされていなかったコードには、追加の問題があります。ボタン宣言の範囲を混乱させています。まず、クラスに対してそれを定義します。

Button submitButton;

あなたはそれを内で再定義しますonCreate()

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

この最後の行を次のように変更します。

submitButton = (Button) findViewById(R.id.submitButton);
于 2011-01-27T17:51:55.863 に答える