我已经在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/

10-10 07:05