2012-07-22 81 views
0

我收到Google Play中应用程序的错误报告。问题是,它很模糊 ,我不能因ProGuard的配置获取了大量的从堆栈跟踪信息:检索目录路径中的空指针异常

的方法,其中应用程序崩溃是:

private File getExternalStorageAppRoot(Context ctx) { 
    String basePath="cache"; 
    if (Build.VERSION.SDK_INT >= 8) { 
     File extFile = ctx.getExternalFilesDir(basePath); 
     if (extFile != null) { 
      return extFile; 
     } 
    } 

    String externalFilesDir = Environment.getExternalStorageDirectory().getAbsolutePath() 
      + File.separator + "Android" + File.separator + "data" + File.separator 
      + ctx.getApplicationInfo().packageName + File.separator + "files"; 

    return new File(externalFilesDir, basePath); 
} 

唯一的例外是NullPointerException和ctx始终不为null。任何关于它在哪里崩溃的想法?

在我的测试这种方法不会崩溃

感谢

+0

您是否知道系统正在运行的SDK级别遇到崩溃? – 2012-07-22 08:37:09

+0

不是,应用程序每周至少接收15次崩溃 – Addev 2012-07-22 08:38:48

+0

NPE是否有可能以另一种方式发生? ProGuard的回溯有时会为堆栈条目提供一些建议。 – 2012-07-22 08:48:07

回答

0

根据你的方法我会检查的结果是:

ctx.getApplicationInfo() // and .packageName 

Environment.getExternalStorageDirectory() // and .getAbsolutePath() 

从我的观点只有这两点才能抛出NPE。也许你可以这样做打印一些注销。

+1

感谢您的回答,但是这些方法都没有提供返回null的权利? – Addev 2012-07-22 08:39:51

+0

这两种方法都是这种方法抛出NPE的独特原因,如果不是其中之一,它不是这种抛出NPE的方法。这更可能是第二种情况('Environment.getExternalStorageDirectory()')。 – 2012-07-22 08:56:48