java.io.FileNotFoundException: ServiceAccountKey.json (没有那个文件或目录)
java.io.FileNotFoundException: ServiceAccountKey.json (No such file or directory)
我刚刚尝试在我的项目中导入 firebase amdin sdk。
我在 android 工作室收到以下消息。
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.lupin.ganzp.ticketfireauthmanager, PID: 7883
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.lupin.ganzp.ticketfireauthmanager/com.lupin.ganzp.ticketfireauthmanager.MainActivity}: java.io.FileNotFoundException: /ServiceAccountKey.json (No such file or directory)
这是一个简单的代码
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 = "c:\~to~ \.json"
- 路径 2 = "ServiceAccountKey.json"
- 路径 3 = "./ServiceAccountKey.json"
- 路径 4 = "com/lupin/ganzp/ticketfireauthmanager/ServiceAccountKey.json"
但是,此代码无法找到我的 json 文件,尽管它确实存在,如您所见。
下面的代码显示创建的文件不存在。
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
有人知道这个问题的解决方案吗?
这是我在 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 文件保存在我为应用程序设置为 工作目录 的同一目录中。
这是一个 Android 项目而不是 Java 项目 - 因此文件的位置应该是 res/raw
或 assets
(它们都是目录,正在被复制而不是被处理)...否则该文件将永远不会进入构建包,导致错误 15
.
请注意,可能值得考虑将名为 ServiceAccountKey.json
的文件放入正在复制的目录中 1:1... 因为该密钥可以很容易地从那里提取.
这与 google-services.json
的行为有很大不同,因为该文件不必将其放入构建包中,因为它由插件处理,然后添加到字符串资源中。
我刚刚尝试在我的项目中导入 firebase amdin sdk。
我在 android 工作室收到以下消息。
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.lupin.ganzp.ticketfireauthmanager, PID: 7883
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.lupin.ganzp.ticketfireauthmanager/com.lupin.ganzp.ticketfireauthmanager.MainActivity}: java.io.FileNotFoundException: /ServiceAccountKey.json (No such file or directory)
这是一个简单的代码
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 = "c:\~to~ \.json"
- 路径 2 = "ServiceAccountKey.json"
- 路径 3 = "./ServiceAccountKey.json"
- 路径 4 = "com/lupin/ganzp/ticketfireauthmanager/ServiceAccountKey.json"
但是,此代码无法找到我的 json 文件,尽管它确实存在,如您所见。
下面的代码显示创建的文件不存在。
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
有人知道这个问题的解决方案吗?
这是我在 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 文件保存在我为应用程序设置为 工作目录 的同一目录中。
这是一个 Android 项目而不是 Java 项目 - 因此文件的位置应该是 res/raw
或 assets
(它们都是目录,正在被复制而不是被处理)...否则该文件将永远不会进入构建包,导致错误 15
.
请注意,可能值得考虑将名为 ServiceAccountKey.json
的文件放入正在复制的目录中 1:1... 因为该密钥可以很容易地从那里提取.
这与 google-services.json
的行为有很大不同,因为该文件不必将其放入构建包中,因为它由插件处理,然后添加到字符串资源中。