時々、Google からランダムに発生したクラッシュ レポートを受け取ることがあり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;
}
}
最後に、1 つの manager の例を示します。
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
1 人のユーザーのフィードバック :
そのため、主にアプリを終了せずに終了すると、アプリに戻ろうとするとアプリがクラッシュすることがよくあります。メニューに戻されることもありますが、ほとんどの場合、アプリから完全に出てしまい、続行するには再起動する必要があります。