Android: Firebase remoteConfig getString() method is removing quotes from string inside default.xml

邮差的信 提交于 2019-12-21 07:28:30

问题


i have the following remote config_default.xml file

<?xml version="1.0" encoding="utf-8"?>
<defaultsMap>
       <entry>
            <key>LOCAL_JSON</key>
            <value>[{"title":"TitleA","path":"pathA","image_url":" Some URL A"},{"title":"TitleB","path":"pathB","image_url":" Some URL B"}]</value>
        </entry>
</defaultsMap>

Now when i try to access it using Firebase remote config getString() method, i always get the string without quotes

"[{title:TitleA,path:pathA,image_url: Some URL A},{title:TitleB,path:pathB,image_url: Some URL B}]"§

as seen in the image below

I put the same String on Firebase remote config console and once the app fetches it from there it places the double quotes in the string like i expect it.

I double checked this and it seems to be working fine when i use the following project gradle file

    apply plugin: 'com.github.ben-manes.versions'
    buildscript {
        repositories {
            maven { url "http://dl.bintray.com/populov/maven" }
            jcenter()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:2.3.3'
            classpath 'me.tatarka:gradle-retrolambda:3.6.1'
            classpath 'com.github.ben-manes:gradle-versions-plugin:0.13.0'
            classpath 'com.stanfy.spoon:spoon-gradle-plugin:1.2.1'
            classpath 'com.google.gms:google-services:3.1.0'
            classpath 'com.google.firebase:firebase-plugins:1.0.5'
        }
    }

    allprojects {
        repositories {
            maven { url "http://dl.bintray.com/populov/maven" }
            maven { url "http://oss.sonatype.org/content/repositories/snapshots" }
            maven { url "https://jitpack.io" }
            jcenter()
            flatDir {
                dirs 'libs'
            }
        }
    }

But when i update the gradle to use new versions for all libraries The quotes seemed to be ignored only then. My new project gradle file

apply plugin: 'com.github.ben-manes.versions'
buildscript {
    repositories {
        maven { url "http://dl.bintray.com/populov/maven" }
        jcenter()
        google()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
        classpath 'com.github.ben-manes:gradle-versions-plugin:0.13.0'
        classpath 'com.stanfy.spoon:spoon-gradle-plugin:1.2.1'
        classpath 'com.google.gms:google-services:3.1.2'
        classpath ('com.google.firebase:firebase-plugins:1.0.5')
    }
}

allprojects {
    repositories {
        maven { url "http://dl.bintray.com/populov/maven" }
        maven { url "http://oss.sonatype.org/content/repositories/snapshots" }
        maven { url "https://jitpack.io" }
        jcenter()
        google()
        flatDir {
            dirs 'libs'
        }
    }
}

I don't know which of the library is causing this to happen but it would be great if someone could point it out.


回答1:


Hi Sheraz Ahmad Khilji first of all, I apologize for the English, I don't know how to write english very well.

This problems occours because firebase has a bug when converting your xml in a Map, to contorn this problem, you can use a MAP instead of a xml.

sample:

firebaseConfig.setDefaults(Map<String, Object>);

This change will solve your problem with double quotes.




回答2:


I sent this issue to the firebase help team and got the following response:

This is actually a known issue on our end and our engineers are already working to fix the issue. I can't share any details or timeline when the fix be available, but please check our release notes for future updates.

Looks like there is a problem with Gradle tools version 3.0.1. The temporary workaround would be to use Gradle tools version 2.3.3.

In the project level build.gradle file:

Replace classpath 'com.android.tools.build:gradle:3.0.1' with

classpath 'com.android.tools.build:gradle:2.3.3'

and

Relpace google() with

maven {
        url 'https://maven.google.com'
}



回答3:


There are multiple solutions for this problem

1. Use firebaseConfig.setDefaults(Map); for setting up the default configuration.

2. Use backslash (\) before Double Quotes(") in your String in .xml file.

3. Replace classpath 'com.android.tools.build:gradle:3.0.1' with

*classpath 'com.android.tools.build:gradle:2.3.3'* 

and Relpace google() with
maven { url 'https://maven.google.com' }

4. Add android.enableAapt2 = false in gradle.properties




回答4:


If, at defaults xml file, you use triple-backslash as escape sequence, it works:

{\\\"someKey\\\": \\\"someValue\\\"}

Will produce {"someKey": "someValue"} as output of FirebaseRemoteConfig's getString() method.



来源:https://stackoverflow.com/questions/47800718/android-firebase-remoteconfig-getstring-method-is-removing-quotes-from-string

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!