返回ArrayList但是接收空指针?

时间:2011-12-15 10:30:27

标签: java

假设我有两种方法。一个创建一个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是返回已经实例化的arraylist的类的实例。我在第二类方法的第一行收到空指针错误:db.getSocialUsers();

当自己调用getSocialUsers()方法时,这有效,并且ArrayList确实返回了正确的元素但是当从另一个类调用它时会给出一个空指针,我不知道为什么< / p>

4 个答案:

答案 0 :(得分:1)

这意味着db对象为null,而不是ArrayList。你在哪里实例化它?

编辑:我建议您使用成员初始化替换构造函数中的实例化:

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

答案 1 :(得分:1)

如果是一行

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

导致NullPointerException,这只能是dbnull的结果。您应该检查数据库是否已打开,引用是否存储在db

答案 2 :(得分:0)

使ArrayList<String> socialWorkers成为第一堂课中的一个字段。检查您的db对象是否为空。

答案 3 :(得分: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