java.io.FileNotFoundException: ServiceAccountKey.json (нет такого файла или каталога) - PullRequest
0 голосов
/ 27 февраля 2019

Я только что попытался импортировать Firebase AMDIN SDK в моем проекте.

Я получаю следующие сообщения в Android Studio.

E / AndroidRuntime: FATAL EXCEPTION: main

Процесс: 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 / lupine / 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 голосов
/ 27 февраля 2019

Это проект Android, а не проект Java - поэтому местоположение файла должно быть res/raw или assets (оба являются каталогами, которые копируются, а не обрабатываются) ... иначе этот файлникогда не попадет во встроенный пакет, что приведет к ошибке 15.

. Просто имейте в виду, что, возможно, стоит подумать о том, чтобы поместить файл с именем ServiceAccountKey.json в каталоги, которые копируются.1: 1 ... потому что этот ключ может быть легко извлечен оттуда.

ведет себя иначе, чем с google-services.json, потому что этот файл не обязательно должен быть включен во встроенный пакет, потому что онобрабатывается плагином и затем добавляется в строковые ресурсы.

0 голосов
/ 27 февраля 2019

Я инициализирую Admin SDK в своем проекте Java следующим образом:

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

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

Я сохраняю файл JSON в том же каталоге, который я установил в качестве рабочего каталога дляприложение.

...