我已经在Google Play中发布了我的应用,并且收到了一位用户的当机报告。不幸的是,由于匿名原因,我没有报告人的详细联系方式,因此我无法获得崩溃的更多详细信息。我只有报告中的异常详细信息。下面是我抛出异常的函数。在以下行引发异常:File dbDir = new File(this.getFilesDir().getPath()+"/database");
我试图找出为什么可以在上一行抛出NullPointerException。
欢迎任何建议。
完整功能如下:
private void ensureDBAvailable() throws IOException{
// The NullPointerException was thrown in the line below
File dbDir = new File(this.getFilesDir().getPath()+"/database");
if (!(dbDir.mkdirs() || dbDir.isDirectory()))
{
//This should never happen, in this case the caller should stop the service
throw(new IOException("Cannot create database directory"));
}
File dbFile = new File(dbDir, MainService.DB_FILENAME);
if(!dbFile.exists())
{
InputStream dbFromApk = null;
OutputStream dbout = null;
try
{
dbFromApk = this.getAssets().open(DB_FILENAME, AssetManager.ACCESS_STREAMING);
//the database file does not exist, let's get it from the APK.
dbout = new FileOutputStream(dbFile);
byte[] buffer = new byte[1024];
int bytesRead = 0;
while((bytesRead = dbFromApk.read(buffer))> 0)
{
dbout.write(buffer, 0, bytesRead);
}
}
finally
{
dbFromApk.close();
dbout.close();
}
}
}
最佳答案
getFilesDir
有时返回null。 It's bug。因此,您必须检查getFilesDir
是否返回null。
关于java - ContextWrapper.getFilesDir()中出现NullPointerException的原因,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22596731/