入力したユーザー名とパスワードをすべてのユーザー名とパスワードのテキストファイルでチェックする方法を作成しました。興味深い問題は、詳細が正しければアプリケーションが進むが、詳細が間違っていればNullPointerExceptionを返すということである。私のコードは以下の通りです:Javaのログインメソッド:詳細が正しくても実行されますが、NullPointerExceptionが正しくない場合に実行されます。
// Checks whether the inputed details are correct
public boolean isCorrect(String u, String p) {
boolean check = false;
String line = null;
try {
do {
line = br.readLine();
// System.out.println("Checking profile : " + line);
String[] info = line.split("\t");
// nested if-statement to improve efficiency over &&
if (info[0].equals(u)) {
System.out.println("username found!");
if (info[1].equals(p)) {
System.out.println("password correct!");
check = true;
} else System.out.println("password incorrect!");
} else System.out.println("username not found!");
} while (line != null && check == false);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return check;
}
返されたブール値が主な活動で、次のコードに入力されますが:真=正しいが、それが実行されている場合、なぜ
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.loginpanel);
Button button = (Button) findViewById(R.id.btnLogin);
Correct = false;
lm = new LoginModel(this);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
EditText textUsername = (EditText) findViewById(R.id.textUsername);
EditText textPassword = (EditText) findViewById(R.id.textPassword);
// Collect the login details entered by the user
String username = textUsername.getText().toString();
String password = textPassword.getText().toString();
// Check the application is registering the correct details
System.out.println(username + "\n" + password);
Correct = lm.isCorrect(username, password);
if (Correct) { // if details are correct then start main program
Intent intent = new Intent (LoginView.this, MenuListView.class);
startActivity(intent);
}
else System.out.println("Login is incorrect...");
}
});
}
私は理解していないことはありませんですCorrect = falseの場合、重大な例外を生成するプログラムがクラッシュします。main、そしてNullPointerException - 単にSystem.out.printlnを出力してはいけません。
_パスワードをプレーンテキストで保存しないでください_。 **特にクライアント上にない** – SLaks
NullPointerExceptionが実際にどこに発生しているか表示していない - スタックトレースには何が表示されますか? –
'//効率を改善するためにifステートメントをネストしました。&&'間違っています。 '&&'は短絡しています。 – SLaks