使用url将对象写入Firebase数据库

Rba*_*bar 2 url android firebase firebase-realtime-database

我正在尝试将一个对象(包括URL作为其属性之一)写入我的Firebase数据库。失败并显示以下错误。

错误

该错误时间更长(确实很长),但仅重复以下操作,然后在此处结束

com.google.android.gms.internal.zzear.zzbq(未知源)com.google.android.gms.internal.zzear.zzbt处com.google.android.gms.internal.zzear.zzbq(未知源) (未知来源)com.google.android.gms.internal.zzeas.zzbu(未知来源)com.google.android.gms.internal.zzear.zzbq(未知来源)com.google.android.gms.internal com.google.android.gms.internal.zzeas.zzbu(未知源)的com.google.android.gms.internal.zzear.zzbq(未知源)的.zzear.zzbt(未知源) .gms.internal.zzear。com.google.firebase.database.DatabaseReference.zza(未知源)com.google.android.gms.internal.zzear.zzbp(未知源)com.google.firebase.database.DatabaseReference处的zzbq(未知源)。在com.companyName.appName.MyActivity $ 13.onSuccess(MyActivity.java :)上的com.companyName.appName.MyActivity.postDataToFirebase(MyActivity.java:582)处的setValue(未知源):551)com.companyName.appName.MyActivity $ 13.onSuccess(MyActivity.java:543)com.google.firebase.storage.zzj.zzi(未知源)com.google.firebase.storage.zzaa.run(未知)来源)android.os.Looper.loop(Looper.java:154)的android.os.Handler.dispatchMessage(Handler.java:95)的android.os.Handler.handleCallback(Handler.java:751)。 com处java.lang.reflect.Method.invoke(本机方法)处的app.ActivityThread.main(ActivityThread.java:6776)com.com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1520) android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)在android.os.Looper.loop(Looper.java :)的android.os.Handler.dispatchMessage(Handler.java:95)处的zza.run(未知源) 154)在android.app.ActivityThread.main(ActivityThread.java:6776)在java.lang.reflect.Method.invoke(本机方法)在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java: 1520)com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)在android.os.Looper.loop(Looper.java :)的android.os.Handler.dispatchMessage(Handler.java:95)处的zza.run(未知源) 154)在android.app.ActivityThread.main(ActivityThread.java:6776)在java.lang.reflect.Method.invoke(本机方法)在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java: 1520)com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)internal.os.ZygoteInit.main(ZygoteInit.java:1410)internal.os.ZygoteInit.main(ZygoteInit.java:1410)

我能够跟踪到将URL包含在要写入Firebase的对象中时崩溃的情况,但是当我省略URL时它不会崩溃的情况。

在我的活动中发布功能

public void postDataToFirebase() {
    Log.d(TAG, "triggering postDataToFirebase...");
    Uri myURL = https://somewebaddress.com/subpath%2Fotherpath%2FanotherPath%2FV3ipNtaGW3tG%2FhairColor%2F-Op032Dasdfie41ZB98d%2FeyeColor%2F3%2FasdfEesWEWf1341DfWds342%2FintroductionVideo.mp4?alt=media&token=a457i222l-6c6a2-2524l4-zy3m-p7384eo295d0di1;
    String greetingValue = "Hi there!";
    String timestamp = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
    Log.e(TAG, "This is the current time = " + timestamp);
    // Create HashMap of all details to post
    Map<String, Object> childUpdate = new HashMap<>();
    childUpdate.put("firstName", firstNameTextField.getText().toString());
    childUpdate.put("lastName", lastNameTextField.getText().toString());
    childUpdate.put("hairColor", hairColorTextField.getText().toString());
    childUpdate.put("greetingValue", greetingValue);
    childUpdate.put("timestamp", timestamp);
    childUpdate.put("URL", myURL);  // **NOTE: If I comment out this line, no error occurs 
    Log.d(TAG, "onSuccess: childUpdate");
    Log.d(TAG, childUpdate.toString());
    // **ISSUE: The error occurs on the line below
    myRef.child("somepath")child(userId).child("someotherpath").setValue(childUpdate);
}
Run Code Online (Sandbox Code Playgroud)

Build.Gradle(应用程序)

我将其包括在内是因为在以下引用的问题中要求使用它

apply plugin: 'com.android.application'

repositories {
    jcenter()
    maven {
        url "https://maven.google.com"
    }
}

dependencies {

    compile fileTree(include: ['*.jar'], dir: 'libs')

    compile "com.android.support:support-v4:25.3.1"
    compile "com.android.support:support-v13:25.3.1"
    compile "com.android.support:cardview-v7:25.3.1"
    compile "com.android.support:appcompat-v7:25.3.1"
    compile 'com.android.support:design:25.3.1'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    compile 'com.google.firebase:firebase-auth:11.4.2'
    compile 'com.google.firebase:firebase-database:11.4.2'
    compile 'com.google.firebase:firebase-crash:11.4.2'
    compile 'com.google.firebase:firebase-config:11.4.2'
    compile 'com.google.firebase:firebase-storage:11.4.2'
    compile 'com.google.firebase:firebase-messaging:11.4.2'
    compile 'com.google.firebase:firebase-core:11.4.2'
    compile 'com.firebase:firebase-jobdispatcher:0.6.0'
    compile 'com.android.volley:volley:1.0.0'
    testCompile 'junit:junit:4.12'
}

List<String> dirs = [
        'main',     // main sample code; look here for the interesting stuff.
        'common',   // components that are reused by multiple samples
        'template'] // boilerplate code that is generated by the sample template process

android {
    compileSdkVersion 26
    buildToolsVersion '26.0.2'

    defaultConfig {
        applicationId "com.company.appname"
        minSdkVersion 21
        targetSdkVersion 26
        versionCode 19
        versionName "4.8"
        multiDexEnabled true
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }

    sourceSets {
        main {
            dirs.each { dir ->
                java.srcDirs "src/${dir}/java"
                res.srcDirs "src/${dir}/res"
            }
        }
        androidTest.setRoot('tests')
        androidTest.java.srcDirs = ['tests/src']

    }


    buildTypes {
        release {
            minifyEnabled true // Enables code shrinking for the release build type.
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
        debug {
            debuggable true
        }
    }
    productFlavors {
    }

}

apply plugin: 'com.google.gms.google-services'
Run Code Online (Sandbox Code Playgroud)

额外:

我还发现了这个问题,该问题似乎基于错误而相似,但是我检查了一下并能够进行更新(在该问题中是不可能的),这使我认为这不是同一问题。

有谁能理解为什么我不包括url却成功却失败(以及如何防止它)的情况,为什么我在firebase上发布成功?

Bob*_*der 5

Uri不是Firebase数据库支持存储的本机类型之一。你需要存储字符串等效代码: Uri.toString()

稍后,当您读取字符串并想要重新创建时Uri,可以使用Uri.parse()