[英]Getting Null Pointer Exception when calling an Activity from onMenuItemClick() method
[英]Getting Null Pointer Exception when using isEmpty() method
我正在嘗試為我的程序實現登錄功能,但它返回 null 指針異常。 我知道當您引用 memory 中沒有任何內容的地方時會發生這種情況,但據我所知,我已經正確實例化了所有對象 - 如果我錯了,請糾正我!
我正在嘗試實現添加用戶功能:我有一個用戶名和密碼列表,並且我有一個現有方法可以讀取該文件並將其存儲在一個數組中。 我想在列表中寫入一個新的登錄名,所以我編寫了一個新方法,將這個數組轉換為 ArrayList 並最終寫入一個新的登錄名,然后再次寫出登錄文件。 問題是我得到了 Null 指針異常。
方法一:
public String[] readFile(){
ArrayList<String> dataList = new ArrayList<String>();
String Line;
try {
String line = br.readLine();
do {
dataList.add(Line);
line = br.readLine();
}
while (!line.isEmpty());
br.close ();
}
catch (Exception e) {
e.printStackTrace();
}
String[] dataArr = new String[dataList.size()];
dataArr = dataList.toArray(dataArr);
return dataArr; // Returns an array containing the separate lines of the file
}
方法二:
public void addNewUser (String username, String password){
String[] dataArr = readFile(); // Read in the list of profiles and store it in an array
ArrayList<String> dataAL = new ArrayList<String>(Arrays.asList(dataArr)); // store array of profiles as ArrayList
dataAL.add(username + "\t" + password);
}
你可能在這里得到空指針
while (!line.isEmpty());
改為
while(line!=null && !line.isEmpty())
如果你注意了異常的堆棧跟蹤,你應該看到引發異常的確切行
如果到達流的末尾,BufferedReader.readLine()將返回null。 所以你要
while (line != null && !line.isEmpty())
`包-> org.springframework.util
.CollectionUtils.isEmpty(行)
內部實現: public static boolean isEmpty(@Nullable Collection<?> collection) { return (collection == Z37A6259CC0C1DAE299A7866489(DFF0BDZ || collection.isEmpty)); }`
將try
塊的主體更改為:
String line = br.readLine();
while (line != null) {
dataList.add(Line);
line = br.readLine();
}
br.close ();
如果要忽略空行,請將其更改為:
String line = br.readLine();
while (line != null) {
if (!line.isEmpty()) {
dataList.add(Line);
}
line = br.readLine();
}
br.close ();
到目前為止提供的其他答案將在第一個空白行停止閱讀。 (如果沒有空行,則不需要調用isEmpty()
。)
我不明白為什么要在readFile方法中向dataList添加空值。 無論如何,我已經重構了你的代碼:
方法1 :
public ArrayList<String> readFile(){
ArrayList<String> dataList = new ArrayList<String>();
try {
//File & File Reader/Stream Initialization Logic
while(line = br.readLine() != null && !line.isEmpty()) {
dataList.add(line);
}
} catch (IOException IOE) {
//IO Exception Handling
} catch (Exception e) {
//General Exception Handling
} finally {
//close the reader/streams here
}
return dataList;
}
方法2 :
public void addNewUser (String username, String password){
ArrayList<String> dataAL = readFile();
dataAL.add(username + "\t" + password);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.