我已經寫了一個Java應用程序,現在我試圖移植到Android,但由於某些原因,使用BufferedReader的readLine()方法返回null 。我已經測試了Java中的代碼,它工作正常沒有問題。我正在閱讀的文件是一個純文本文件,我已將其放入其餘的java文件中。我的代碼簡單需要在登錄,並經與在配置文件中的文本文件閱讀點擊登錄按鈕檢查細節用戶輸入下面是我的代碼簡單化:BufferedReader在Android應用程序中返回null,但在Java應用程序中不返回
OnClickListener在主要活動:
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 if login details are correct
LoginModel login = new LoginModel();
Correct = login.isCorrect(username, password); // LINE COMMENTED
// OUT SO THAT DETAILS DON'T NEED TO BE ENTERED
// Correct = true; // used to bypass login for now
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...");
}
});
}
的LoginModel.java類:
public LoginModel() {
file = new File("Profiles");
try {
br = new BufferedReader(new FileReader(file));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Login Constructor successful!");
}
// Checks whether the inputted details are correct
public static boolean isCorrect(String u, String p) {
System.out.println(p);
boolean check = false;
String line = null;
try {
do {
line = br.readLine(); // This line is returning null
// 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);
return check;
它是br.readLine(),這是由於某種原因返回null。我查了它,bufferedreader似乎完全支持。
編輯:好的,我發現它並不是真的找到這個文件,而是可能試圖執行isCorrect()方法,因爲它是靜態的。我已經刪除了方法和br聲明靜態標籤,並將配置文件文件移動到了所有我的java文件的文件夾中,但仍然無法找到它。我應該如何參考這個職位?如果我只是簡單地引用它的名字,那麼android查找文件的默認位置是什麼?非常感謝!
這是一個很好的觀點 - 我剛開始使用Java,並且因爲它似乎幫助我避免了很多範圍問題,而陷入了將很多方法聲明爲靜態的壞習慣,但顯然有很多我現在知道的陷阱!我已經刪除了靜態修飾符,並沒有刪除錯誤。如果我正在閱讀文本文件,我應該將它放在我的Android項目中? – user1058210 2012-01-02 22:44:19
取決於,如果您出於某種原因需要實際的文件名,請使用資產,它位於單獨的文件夾中:[project]/assets。否則,您可以使用原始資源,其中有[project]/res/raw文件夾。您可以使用Resources.openRawResource(http://developer.android.com/reference/android/content/res/Resources.html#openRawResource(int))或(使用資產時)使用資產管理器(http: //developer.android.com/reference/android/content/res/AssetManager.html)。 – Boude 2012-01-02 23:02:16
@ user1058210:閱讀我的編輯,瞭解br爲什麼可能返回null。 – amit 2012-01-03 08:23:33