【问题标题】:write object with url to firebase database将带有 url 的对象写入 firebase 数据库
【发布时间】:2017-10-31 09:45:41
【问题描述】:

我正在尝试将一个包含 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) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520) 在 com.android.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);
}

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'

补充:

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

有谁知道为什么我在不包含 url 的情况下发布到 firebase 的帖子会成功,但在包含网址时却失败(以及如何防止它)?

【问题讨论】:

  • 您能否再次检查您发布的代码是否准确反映了您正在运行的内容?最后一条语句包含setValue(childUpdates)(注意childUpdates末尾的's'),但是您在前面的代码中构建的映射名为childUpdate
  • @BobSnyder 该帖子现在应该准确地反映我正在运行的内容。我到处跑childUpdate(没有childUpdates

标签: android firebase url firebase-realtime-database


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    如果要存储 URL,请将其存储在 String 中。

    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;"
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 你能帮我解决这个question吗?
      猜你喜欢
      • 1970-01-01
      • 2022-01-18
      • 2020-08-15
      • 1970-01-01
      • 2020-12-11
      • 1970-01-01
      • 1970-01-01
      • 2014-12-16
      • 2018-05-08
      相关资源
      最近更新 更多