有时我收到由谷歌随机NullPointerExceptions
(见上文)导致的崩溃报告。我试图重现这些错误,但我无法赶上它们。 NPE的Android - 随机NullPointerException崩溃报告
例子,我得到:
Caused by: java.lang.NullPointerException
at com.gamequiz.databasemanager.CategoryManager.getAllCategories(CategoryManager.java:28)
Caused by: java.lang.NullPointerException
at com.gamequiz.databasemanager.QuestionManager.getQuestionsFromLevel(QuestionManager.java:30)
at com.gamequiz.databasemanager.QuestionManager.getNumberOfQuestionAnsweredFromLevel(QuestionManager.java:148)
不过,我觉得,我的
dbHelper
变量是
null
有时,但我想不出为什么。
因为我不知道如何解决,我张贴我的代码的所有步骤:
首先我初始化在LaunchActivity
所有经理:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_launch);
initializeAllManagers();
//some stuff
}
public void initializeAllManagers(){
InitializeAllManagers.init(getApplicationContext());
}
在我InitializeAllManagers
类,我将所有的管理人员,我需要为应用程序的生命周期:
public class InitializeAllManagers {
public static void init(Context context){
DatabaseManager.init(context);
CategoryManager.init(DatabaseManager.getInstance().getHelper());
//and others initializations
}
}
DatabaseManager
类(dbManager的初始化d dbHelper):
public class DatabaseManager {
private static DatabaseManager instance;
private DatabaseHelper helper;
public static void init(Context ctx) {
if (instance==null) {
instance = new DatabaseManager(ctx);
}
}
public static DatabaseManager getInstance() {
return instance;
}
private DatabaseManager(Context ctx) {
helper = new DatabaseHelper(ctx);
}
public DatabaseHelper getHelper() {
return helper;
}
}
终于有一个经理的例子:
public class CategoryManager {
private static DatabaseHelper dbHelper;
public static void init(DatabaseHelper dbHelperInstance) {
dbHelper = dbHelperInstance;
}
public static ArrayList <Category> getAllCategories(){
ArrayList <Category> cList = null;
try {
cList = (ArrayList<Category>) dbHelper.getCategoryDao().queryForAll();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return cList;
}
}
所以我怀疑我dbHelper
变量是null
有时。有没有人有关于我如何解决这个问题的想法?
编辑:
NPE主要是指这行:
cList = (ArrayList<Category>) dbHelper.getCategoryDao().queryForAll();
Dao <Question, Long> questionDao = dbHelper.getQuestionDao();
这就是为什么我怀疑dbHelper
是null
有时,显然崩溃时,应用程序是睡了一会发生(见上面的反馈)。一个用户的
反馈:
左右,主要是如果我离开应用程序而不退出它,应用程序会经常崩溃 当我尝试回去吧。有时我只是被送回 的菜单,但大多只是一路走出应用程序,我必须 重新启动它才能继续。
任何想法具体行号对应NPE? – Gray
'dbHelper'可以是'null',或'getCategoryDao()'返回的dao可以是'null'。你可以显示该代码吗? – Gray
有没有办法帮助者可以被分配到'null'?那可以改成'最后'吗? – Gray