android - 将带有 url 的对象写入 firebase 数据库

标签 android firebase url firebase-realtime-database

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

错误

这个错误比较长(真的很长)但是它只是重复了下面然后到这里结束

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

我能够追踪到当我在写入到 firebase 的对象中包含我的 URL 时它会崩溃,但是当我省略 URL 时它不会崩溃。

我的 Activity 中的 Post 函数

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(应用程序)

我把它包括在内是因为它在下面引用的问题中被要求

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 上的帖子在我不包含 url 时成功但在我包含 url 时失败(以及如何防止它)?

最佳答案

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

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

关于android - 将带有 url 的对象写入 firebase 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47023293/

相关文章:

ios - Swift Firebase QueryOrdered

ios - 从Firebase Firestore获取数据时,我的SwiftUI应用程序崩溃并出现错误。这可能是什么原因造成的?

c# - 如何读取包含未编码数据的查询字符串?

git - 当 pw 以 @ 结尾时,使用用户 :pw@github. com/repo 通过 https 连接到 github

android - 为当前的 Android 手机创建模拟器

c# - 为什么 Xamarin.Forms 在显示几个标签时如此缓慢(尤其是在 Android 上)?

firebase - 我们如何将 Firebase Analytics 与基于 expo 的 react-native 应用程序一起使用

android - Android 中的音频文件流无法在 Android 2.3 上运行

java - socket.outputStream 为什么要花这么多时间?

c# - 删除操作和查询字符串之间的斜杠(就像 SO 的搜索行为一样)