我是一个初级的android开发人员,每天都有很多错误和它们的解决方案。我已经注意到我有很多次得到java.lang.NullPointerException: Attempt to invoke virtual method 'xxx' on a null object reference。在NullPointerException之前,听起来很熟悉某个值为空,但问题从下一个短语开始。[如有问题,请按代码操作]在我看来,我发现这一点非常不清楚,而且由于android studio与eclipse不同,它只会不断地对任何类型的问题说Attempt to invoke virtual method 'xxx' on a null object reference,所以很难知道我遗漏了什么。无论是对于游标、数据库、arraylist还是任何你可以假设的对象,类似android studio的疯狂机器人总是会给出这个错误。有人能解释一下这到底是什么意思吗?在一般情况下,如果我犯了这个错误,我应该怎么做?这是我在应用程序中面临的一个奇怪行为,它让我发疯。这个功能工作正常ArrayList<HashMap<String, String>> getAllRows() { Cursor c = db.query(TABLE_NAME, ALL_KEYS, null, null, null, null, null); // THIS LINE IS MY POINT // ... // c.close(); return profilesArray;}但是另一个函数给了我错误public boolean updateRow(long ID, int tracks) { String where = COLUMN_NAME_ID + " = " + ID; Cursor c = db.query(TABLE_NAME, ALL_KEYS, where, null, null, null, null); // At this line. What happened to this now, if it's working fine in getAllRows() String title = null; if (c != null) { c.moveToFirst(); title = c.getString(1); } c.close(); // ... // return db.update(TABLE_NAME, newValues, where, null) != 0;}这两个函数的格式都一样,放在同一个类中,但为什么只有第二个函数会出错?如果我考虑npe,那么它也应该是java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.Cursor android.database.sqlite.SQLiteDatabase.query(java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String)' on a null object reference功能的情况,但事实并非如此。编辑函数updateRow()在另一个类中调用,该类描述了一些不同的数据库函数,下面是-Playlist allPlaylistDB;public PlaylistSongs(Context ctx) { this.context = ctx; allPlaylistDB = new Playlist(context); // We have initiated another database class myDBHelper = new ReaderDB(context);}详细的帮助将不胜感激。 (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 正如user2864740清楚地解释的那样,虚方法是一种多态解析的方法(私有的方法不是“virtual”,也不是final方法,也不是static方法方法);没有什么“特别”的地方,原因是No.For()你在下一行得到了错误Cursor c = db.query(TABLE_NAME, ALL_KEYS, where, null, null, null, null);这个错误清楚地指出,android.database.Cursor android.database.sqlite.SQLiteDatabase.query(java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String)被一个空引用调用。在你的代码中什么可以是null?它必须是db,因为您正试图对query()引用调用(虚拟)方法null。另一件要弄清楚出错的事情是在上面的行上放置一个断点,然后您将看到db将为空。要修复它,请确保正确初始化db变量。您还可以说它在其他地方运行良好,确保您没有在代码的其他地方使db对象无效。 (adsbygoogle = window.adsbygoogle || []).push({});