java.io.FileNotFoundException:ServiceAccountKey.json(无此类文件或目录)

时间:2019-02-27 13:44:47

标签: android firebase kotlin filenotfoundexception firebase-admin

我刚刚尝试在我的项目中导入Firebase amdin sdk。

我在android studio中收到以下消息。

  

E / AndroidRuntime:致命异常:主要

     

进程:com.lupin.ganzp.ticketfireauthmanager,PID:7883

     

java.lang.RuntimeException:无法启动活动ComponentInfo {com.lupin.ganzp.ticketfireauthmanager / com.lupin.ganzp.ticketfireauthmanager.MainActivity}:java.io.FileNotFoundException:/ServiceAccountKey.json(无此类文件或目录)

这可能是简单的代码

const val relativePath = "/ServiceAccountKey.json"

class MainActivity : AppCompatActivity() 
{
    override fun onCreate(savedInstanceState: Bundle?) 
    {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        SDK_Init()
        Access_DB("newDB")
    }

    fun SDK_Init()
    {
        var serviceAccount = FileInputStream(relativePath)
        val options = FirebaseOptions.Builder()
            .setCredentials(GoogleCredentials.fromStream(serviceAccount))
            .setDatabaseUrl("https://<HiDE>.firebaseio.com/")
            .build()

        FirebaseApp.initializeApp(options)
    }       
}

我已经做了几乎可以做的事情...

我那样尝试

  1. Path-1 =“ c:\〜to〜\ .json”
  2. Path-2 =“ ServiceAccountKey.json”
  3. Path-3 =“ ./ServiceAccountKey.json”
  4. Path-4 =“ com / lupin / ganzp / ticketfireauthmanager / ServiceAccountKey.json”

但是,此代码无法找到我的json文件,尽管您在此图片中确实存在该文件。

enter image description here

下面的代码显示创建的文件不存在。

val name = File(".").canonicalPath
    println("Test $name")
    val file = File(name, "/" + "ServiceAccountKey.json")
    println("file path : " + file)
    println(file.exists())

    println(file.exists())  //false
    println(file.canRead())  //false

谁知道解决这个问题的方法?

2 个答案:

答案 0 :(得分:1)

这是一个Android项目,而不是Java项目-因此,文件的位置应为res/rawassets(这两个都是目录,将被复制而不是进行处理)。 。否则该文件将永远不会进入内置软件包,从而导致错误15

请注意,将一个名为ServiceAccountKey.json的文件放入正在1:1复制的目录中可能是值得考虑的……因为可以从那里容易地提取该密钥。

这与google-services.json的行为方式大不相同,因为该文件不必将其放入内置包中,因为它是由插件处理的,然后添加到字符串资源中。

答案 1 :(得分:0)

有一种方法可以在Java项目中初始化Admin SDK:

FileInputStream serviceAccount = new FileInputStream("project-credentials.json");

FirebaseOptions options = new FirebaseOptions.Builder()
        .setCredential(FirebaseCredentials.fromCertificate(serviceAccount))
        .setDatabaseUrl("https://mydatabase.firebaseio.com/")
        .build();

我将JSON文件保存在与应用程序的工作目录相同的目录中。

相关问题