2011-12-15 51 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