2011-12-15 50 views
-1

假設我有兩種方法。一個創建一個arraylist並返回它,另一個檢索該列表進行處理。兩種方法都有不同的類別:ArrayList被返回,但收到一個空指針?

public ArrayList getSocialUsers() throws SQLException 
{ 
    Connection conn=DriverManager.getConnection("jdbc:mysql:///socialsystemtest1?user=root&password="); 
    Statement stmt= null; 
    String query="SELECT FORE_NAME FROM socialsystemtest1.socialworkers"; 
    stmt= conn.createStatement(); 
    ArrayList<String> socialWorkers= new ArrayList<String>(); 
    try{ 
     ResultSet rs= stmt.executeQuery(query); 
     while(rs.next()) 
     { 
      String user= rs.getString("Fore_Name"); 
      socialWorkers.add(user); 
     } 
    } 
    catch(SQLException e) { 
     //do nothing 
    } 
    finally{ 
     if(stmt != null) { 
      stmt.close(); 
     } 
    } 

    return socialWorkers; 

} 

public void processArray(){ 
    try{ 
    ArrayList<String>= db.getSocialUsers(); 
    //code ommitted 
    } 
    catch(SQLException e){ 
    //deal with it here 
    } 
} 

db是返回已經實例化的數組列表的類的實例。我在第二類方法的第一行收到一個空指針錯誤:調用自身的getSocialUsers()方法時db.getSocialUsers();

這個作品和ArrayList確實與正確的元素返回但是從另一個類調用時,它提供一個空指針,我不知道爲什麼

+0

給出NPE的行不能編譯。什麼是實際的代碼? – Ishtar 2011-12-15 10:34:08

+0

你在哪裏實例化數據庫? – Muse 2011-12-15 10:34:25

回答

1

這意味着db對象是null而不是ArrayList。你在哪裏實例化它?

編輯:我建議你更換實例與成員初始化的構造器:

public class Admin { 
    Database db = new Database(); 
    // etc. 
} 
0

使ArrayList<String> socialWorkers第一類字段。檢查您的db對象是否爲空。

1

如果行

ArrayList<String> array = db.getSocialUsers(); 

導致NullPointerException異常,這隻能是一個結果dbnull。你應該檢查數據庫是否打開並且參考文件存儲在db

0

在你的第二堂課你有什麼processArray你如何初始化db。根據你的帖子,似乎db爲空,因此它會拋出NPE。

確保已初始化db

你在processArray代碼應該是這樣的:

ArrayList<String> valuesFromDB = db.getSocialUsers(); 

雖然更好的節目總是會問你這樣做:

List<String> valuesFromDB = db.getSocialUsers(); 

而且您的getSocialUsers應該返回List而不是ArrayList,如:

public List<String> getSocialUsers() throws SQLException