2013-10-14 38 views
0

我在谷歌收到此崩溃报告Play开发者控制台:安卓:NullPointerException异常中的onCreate

java.lang.RuntimeException: Unable to start activity ComponentInfo{ZhuangDictActivity}: java.lang.NullPointerException 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1659) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1675) 
at android.app.ActivityThread.access$1500(ActivityThread.java:121) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:943) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:138) 
at android.app.ActivityThread.main(ActivityThread.java:3701) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:507) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:636) 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.NullPointerException 
at ZhuangDictActivity.showChooseDictDialog(ZhuangDictActivity.java:560) 
at ZhuangDictActivity.onCreate(ZhuangDictActivity.java:339) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1623) 
... 11 more 

这是的onCreate下:

sharedPreferences = getSharedPreferences(PREFERENCES_FILE, Context.MODE_PRIVATE); 
      dictName = sharedPreferences.getString(PREFERENCES_DICT_NAME, null); 
if (dictName == null) { 
       showChooseDictDialog(false); 
      } else { 
       modifyDictVar(dictName); 
       setTitle(loadDictInfo()); 

       initDbFile(); 
       databaseHelper.initDb(); 
      } 

的showChooseDictDialog:

private void showChooseDictDialog(boolean cancelable) { 
     AlertDialog.Builder dictChooseBuilder = new AlertDialog.Builder(this); 
     FilenameFilter filter = new FilenameFilter() { 
      @Override 
      public boolean accept(File dir, String filename) { 
       return filename.contains(".ifo"); 
      } 
     }; 
     dictFilenames = dictPathFile.list(filter); 
     if (dictFilenames.length > 0) { 
      dictChooseBuilder.setItems(dictFilenames, new DialogInterface.OnClickListener() { 

       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        dictName = dictFilenames[which].substring(0, dictFilenames[which].indexOf(".ifo")); 

        modifyDictVar(dictName); 
        initDbFile(); 
        databaseHelper.initDb(); 

        if (new File(ifoFileName).isFile()) { 
         setTitle(loadDictInfo()); 
        } 

        if (new File(idxFileName).isFile() && dictFile.isFile()) { 
         sharedPreferences.edit().putString(ZhuangDictActivity.PREFERENCES_DICT_NAME, dictName).commit(); 

         // dbHelper.dropTable(tableName); 
         if (!databaseHelper.isTableExist(tableName)) { 
          databaseHelper.beginTransaction(); 
          databaseHelper.createTable(tableName); 
          for (char c = 'a'; c <= 'z'; c++) { 
           String temp = DatabaseHelper.transTableName(c); 
           databaseHelper.createTable(temp); 
          } 
          databaseHelper.setTransactionSuccessful(); 
          databaseHelper.endTransaction(); 
          new LoadDictIndexAsyncTask().execute(dictName); 
         } 
        } else { 
         showDialog(getResources().getString(R.string.choose_dict_content)); 
        } 
       } 
      }); 
      dictChooseBuilder.setCancelable(cancelable).setTitle(getResources().getString(R.string.choose_dict_title)) 
        .create().show(); 
     } else { 
      dictChooseBuilder.setCancelable(cancelable).setMessage(
        getResources().getString(R.string.choose_dict_content)).create().show(); 
     } 
    } 

完整ZhuangDictAcitivity.java的源代码可在此处获得:https://code.google.com/p/zhuang-dict/source/browse/trunk/ZhuangDict/src/cn/wangdazhuang/zdict/ZhuangDictActivity.java

任何人都知道这个解决方案?

+0

您能否提供有关发生错误的位置的更多信息? – Tafari

+2

使用该应用程序版本构建的ZhuanDictActivity.java版本的第560行是什么? – laalto

+0

尝试在alertdialog中提供上下文作为'AlertDialog.Builder dictChooseBuilder = new AlertDialog.Builder(ZhuangDictActivity.this);' – GrIsHu

回答

0

基于注释的问题是在这里:

dictFilenames = dictPathFile.list(filter); 
if (dictFilenames.length > 0) { 

File.list()可能返回null例如,如果File是不是一个目录。并且访问null阵列的length字段导致NullPointerException。以下更改可能有所帮助:

dictFilenames = dictPathFile.list(filter); 
if (dictFileNames != null && dictFilenames.length > 0) { 
+0

感谢您的回答。问题是我只知道Developer Console的这个错误。在模拟器和我的设备上测试时,我不会遇到此错误。那么我应该怎么知道这个问题是否已经解决?对不起,我还是Android应用开发新手。 – user2872856

+0

@ user2872856由于您没有准确的步骤/环境来重现崩溃,所以您无法确定问题是否确实得到解决。但是,在这种情况下,如果知道具有确切行号的崩溃异常,则可以向后推理崩溃的直接原因(空数组引用)和解决方法(在使用前检查null)。该代码对运行时环境做出了许多假设,但并非所有设备和用户都适用,例如, 1)存在外部存储2)它是可写的3)它包含一个给定名称的文件夹。 – laalto

相关问题