我正在尝试将一个包含 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/