2011-01-27 15 views
1

私は初めてのユーザーにパスワードを入力するよう求めるアプリを作成しています。しかし、Submitボタンを押すたびにアプリケーションが停止し、私は彼がSharedPreferencesのために作ったクラスのためだと思います。私はクラスに何を入れるべきか分からない。助けてください。ありがとう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); 
} 
} 

Submitボタンを押すたびに、私はMainActivityクラスの開始に私を送りません。

+0

に裏打ちされた、あなたことができないのJava環境パッケージをあなたのカスタムプリファレンスクラスの代わりに永続的な記憶装置? – CoolBeans

+0

Java Preferencesパッケージはどのように使用できますか?申し訳ありません、私はアンドロイドのちょうど初心者です。 – sean

+0

表示されていれば、いくつかのコードとエラーメッセージを投稿してください。これはあなたの正確な問題をよりよく理解するのに役立ちます。 –

答えて

6

Stringsを正しく比較していません。

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

EDITと

if("".equals(password)) 

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

if(password=="") 

置き換える
これらの変更を行う必要がある理由は、(password=="")が常にfalseになるため、elseブロックが常に実行されるためです。 elseブロック内では、唯一のテストは(passwordEditText.getText().toString()== password)であり、これはでもは常にfalseとなります。そのため、StartMain()への2回の呼び出しは、到達不能なコードブロック内にあり、実行されることはありません。さまざまなifelseブロックにLog.d("MY_TAG","message goes here");行の束を入れることで、これを簡単に実証できます。

EDIT2
Ah。 Woops。 String比較の問題の明白さによって私が盲目になったコードには別の問題があります。あなたはボタン宣言の範囲を混乱させています。あなたは最初のクラスのためにそれを定義します。

Button submitButton; 

ザ・あなたはonCreate()以内にそれを再定義:

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

変更するには、この最後の行をする:

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

'password ==" "' nullを返す場合、else部分もスキップしますか? –

+0

'password ==" "'は 'true'か' false'を返し、 'null'は返しません。おそらく 'password' **が**' null'ですか?もしそうなら、元のテストと私の提案された置換の両方が両方とも 'false'を返します。 –

+0

私は、メソッドstartMain()は常に 'password =" "が何を返すかに依存しないので、実際には文字列の間違った比較では解決できないと思います。 –

関連する問題