我正在尝试将一个对象(包括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会成功,当我不包含网址但是在我做的时候失败(以及如何防止它)?
答案 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数据库