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

时间:2017-10-30 20:01:57

标签: android firebase url firebase-realtime-database

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

错误

此错误较长(非常长),但它只是重复以下内容,然后在此处结束

  

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

当我在我写入firebase的对象中包含我的URL时,我能够找到它崩溃的情况,但是当我省略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);
}

Build.Gradle(app)

我之所以这样,是因为在下面提到的问题中要求

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'

其他

我也发现这个问题似乎与错误类似,但我查了一下,我能够进行更新(这个问题不可能),让我觉得这不是同一个问题。

有没有人理解为什么我的帖子到firebase会成功,当我不包含网址但是在我做的时候失败(以及如何防止它)?

3 个答案:

答案 0 :(得分:5)

Uri不是Firebase数据库支持的native types之一。您需要存储等效的字符串:Uri.toString()

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

答案 1 :(得分:1)

myURL类型是URI&amp; firebase不允许存储URI。 Firebase仅允许String,Long,Double,Boolean,Map,List。 (见https://firebase.google.com/docs/database/android/read-and-write)。

如果您想存储您的网址,请将其存储在字符串中。

String myURL = "https://somewebaddress.com/subpath%2Fotherpath%2FanotherPath%2FV3ipNtaGW3tG%2FhairColor%2F-Op032Dasdfie41ZB98d%2FeyeColor%2F3%2FasdfEesWEWf1341DfWds342%2FintroductionVideo.mp4?alt=media&token=a457i222l-6c6a2-2524l4-zy3m-p7384eo295d0di1;"

答案 2 :(得分:0)

将其转换为字符串,然后上传到firebase数据库