2012-07-22 45 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