有时我会收到来自谷歌的随机崩溃报告NullPointerExceptions
(见上文)。我试图重现这些错误,但我无法捕捉到它们。
我得到的 NPE 示例:
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 和 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
会发生这种情况,并且当应用程序休眠片刻时显然会发生崩溃(请参阅上面的反馈)。
一位用户的反馈:
所以,主要是如果我离开应用程序而不退出它,当我尝试返回它时,应用程序经常会崩溃。有时我只是被送回菜单,但主要是完全退出应用程序,我必须重新启动它才能继续。