Android — Firebase Storage C ++ JNI jstring имеет неправильный тип:

Я занимаюсь разработкой игры Cocos2D-X, в которой я успешно интегрировал FireBase.

У меня проблема только на Android, на iOS работает нормально.

Это код:

    auto storage = firebase::storage::Storage::GetInstance(firebase::App::GetInstance());

std::string stringPath = "users/" + currentId + "/image.png";
auto child = storage->GetReference().Child(stringPath.c_str());

//writtenPath is file:///data/user/0/app.game.Swipe/files/userImage.png
auto future = child.PutFile(writtenPath.c_str());

И я получаю следующий сбой:

    06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470] JNI DETECTED ERROR IN APPLICATION: jstring has wrong type: android.net.Uri$StringUri
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470]     in call to GetStringUTFChars
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470]     from void com.google.firebase.app.internal.cpp.JniResultCallback.nativeOnResult(java.lang.Object, boolean, int, java.lang.String, long, long)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470] "main" prio=5 tid=1 Runnable
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470]   | group="main" sCount=0 dsCount=0 obj=0x750de730 self=0xf2105400
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470]   | sysTid=14484 nice=-4 cgrp=default sched=0/0 handle=0xf5730534
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470]   | state=R schedstat=( 0 0 0 ) utm=130 stm=25 core=1 HZ=100
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470]   | stack=0xff60d000-0xff60f000 stackSize=8MB
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470]   | held mutexes= "mutator lock"(shared held)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470]   native: #00 pc 00350c69  /system/lib/libart.so (_ZN3art15DumpNativeStackERNSt3__113basic_ostreamIcNS0_11char_traitsIcEEEEiP12BacktraceMapPKcPNS_9ArtMethodEPv+128)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470]   native: #01 pc 0033117d  /system/lib/libart.so (_ZNK3art6Thread9DumpStackERNSt3__113basic_ostreamIcNS1_11char_traitsIcEEEEbP12BacktraceMap+304)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470]   native: #02 pc 0023996f  /system/lib/libart.so (_ZN3art9JavaVMExt8JniAbortEPKcS2_+846)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470]   native: #03 pc 00239ea7  /system/lib/libart.so (_ZN3art9JavaVMExt9JniAbortVEPKcS2_St9__va_list+58)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470]   native: #04 pc 000ca603  /system/lib/libart.so (_ZN3art11ScopedCheck6AbortFEPKcz+42)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470]   native: #05 pc 000c9ebb  /system/lib/libart.so (_ZN3art11ScopedCheck13CheckInstanceERNS_18ScopedObjectAccessENS0_12InstanceKindEP8_jobjectb+566)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470]   native: #06 pc 000c92a5  /system/lib/libart.so (_ZN3art11ScopedCheck22CheckPossibleHeapValueERNS_18ScopedObjectAccessEcNS_12JniValueTypeE+184)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470]   native: #07 pc 000c86d9  /system/lib/libart.so (_ZN3art11ScopedCheck5CheckERNS_18ScopedObjectAccessEbPKcPNS_12JniValueTypeE+800)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470]   native: #08 pc 000ceebf  /system/lib/libart.so (_ZN3art8CheckJNI22GetStringCharsInternalEPKcP7_JNIEnvP8_jstringPhbb+490)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470]   native: #09 pc 000c4a51  /system/lib/libart.so (_ZN3art8CheckJNI17GetStringUTFCharsEP7_JNIEnvP8_jstringPh+24)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470]   native: #10 pc 0069252d  /data/app/app.game.Swipe-2/lib/arm/libMyGame.so (_ZN7_JNIEnv17GetStringUTFCharsEP8_jstringPh+10)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470]   native: #11 pc 00692d97  /data/app/app.game.Swipe-2/lib/arm/libMyGame.so (_ZN8firebase7storage8internal16MetadataInternal12download_urlEv+46)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470]   native: #12 pc 00691abb  /data/app/app.game.Swipe-2/lib/arm/libMyGame.so (_ZNK8firebase7storage8Metadata12download_urlEv+8)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470]   native: #13 pc 00625ddc  /data/app/app.game.Swipe-2/lib/arm/libMyGame.so (???)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470]   native: #14 pc 00625e94  /data/app/app.game.Swipe-2/lib/arm/libMyGame.so (???)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470]   native: #15 pc 006a3f53  /data/app/app.game.Swipe-2/lib/arm/libMyGame.so (_ZN8firebase26ReferenceCountedFutureImpl26ReleaseMutexAndRunCallbackEj+70)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470]   native: #16 pc 00695b97  /data/app/app.game.Swipe-2/lib/arm/libMyGame.so (_ZN8firebase7storage8internal24StorageReferenceInternal14FutureCallbackEP7_JNIEnvP8_jobjectbiPKcPv+1162)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470]   native: #17 pc 0069f3c1  /data/app/app.game.Swipe-2/lib/arm/libMyGame.so (_ZN8firebase4util32JniResultCallback_nativeOnResultEP7_JNIEnvP8_jobjectS4_hiP8_jstringxx+100)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470]   native: #18 pc 00000ba9  /data/data/app.game.Swipe/code_cache/app_resources_lib.dex (Java_com_google_firebase_app_internal_cpp_JniResultCallback_nativeOnResult__Ljava_lang_Object_2ZILjava_lang_String_2JJ+172)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470]   at com.google.firebase.app.internal.cpp.JniResultCallback.nativeOnResult(Native method)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470]   at com.google.firebase.app.internal.cpp.JniResultCallback.onCompletion(JniResultCallback.java:196)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470]   - locked <0x0182127e> (a com.google.firebase.app.internal.cpp.JniResultCallback)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470]   at com.google.firebase.app.internal.cpp.JniResultCallback$TaskCallback.onSuccess(JniResultCallback.java:106)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470]   - locked <0x017873df> (a java.lang.Object)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470]   at com.google.firebase.storage.zzi.zzi(unavailable:-1)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470]   at com.google.firebase.storage.zzz.run(unavailable:-1)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470]   at android.os.Handler.handleCallback(Handler.java:751)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470]   at android.os.Handler.dispatchMessage(Handler.java:95)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470]   at android.os.Looper.loop(Looper.java:154)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470]   at android.app.ActivityThread.main(ActivityThread.java:6682)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470]   at java.lang.reflect.Method.invoke!(Native method)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470]   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470]   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470]

Я также попытался удалить «file: //» из начала строки, но затем я получил ошибку «файл не найден».

Также я попытался сделать то же самое с тем же путем к файлу (и изображению) и путем хранения, но с кодом Java, и это работает без каких-либо ошибок.

Любая помощь будет оценена.

ОБНОВИТЬ:

Кажется, что сбой происходит, когда я пытаюсь получить URL-адрес загрузки из данных результатов.

ОБНОВЛЕНИЕ 2:

Я говорил с командой Firebase, и кажется, что это внутренняя проблема. Мы нашли обходной обходной путь:

  1. Получить URL-адрес загрузки с помощью специального метода.
  2. В URL вы должны заменить / после пользователя на% 2F

например: ./users/-Kn-X3qD8QuP9C9jIPkx/image.png -> ./users%2F-Kn-X3qD8QuP9C9jIPkx%2Fimage.png

  1. Разберите json, который вы получили, и получите из него downloadTokens и измените URL, чтобы он выглядел так:

./users%2F-Kn-X3qD8QuP9C9jIPkx%2Fimage.png?alt=media&маркер = downloadTokens

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]