15

我有以下远程config_default.xml文件

<?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>

现在,当我尝试使用 Firebase 远程配置getString()方法访问它时,我总是得到不带引号的字符串

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

如下图所示

在此处输入图像描述

我在Firebase 远程配置控制台上放置了相同的字符串,一旦应用程序从那里获取它,它就会像我期望的那样将双引号放在字符串中。

我仔细检查了这一点,当我使用以下项目 gradle 文件时它似乎工作正常

    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'
            }
        }
    }

但是当我更新 gradle 以对所有库使用新版本时,引号似乎才被忽略。我的新项目 gradle 文件

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'
        }
    }
}

我不知道是哪个图书馆导致这种情况发生,但如果有人能指出这一点,那就太好了。

4

4 回答 4

2

嗨 Sheraz Ahmad Khilji 首先,我为英语道歉,我不知道如何写好英语。

出现此问题是因为 firebase 在 Map 中转换 xml 时存在错误,为了解决此问题,您可以使用 MAP 而不是 xml。

样本:

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

此更改将使用双引号解决您的问题。

于 2018-02-23T22:45:13.847 回答
1

我将此问题发送给 firebase 帮助团队并得到以下回复:

这实际上是我们的一个已知问题,我们的工程师已经在努力解决这个问题。当修复可用时,我无法分享任何详细信息或时间表,但请查看我们的发行说明以了解未来的更新。

Gradle 工具 3.0.1 版似乎存在问题。临时解决方法是使用Gradle 工具版本 2.3.3

项目级 build.gradle文件中:

替换classpath 'com.android.tools.build:gradle:3.0.1'

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

替换google()

maven {
        url 'https://maven.google.com'
}
于 2018-01-03T06:30:35.250 回答
0

如果在默认的 xml 文件中,您使用三反斜杠作为转义序列,它可以工作:

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

{"someKey": "someValue"}作为 FirebaseRemoteConfiggetString()方法的输出生成。

于 2018-12-28T18:32:59.523 回答
0

这个问题有多种解决方案

1.使用firebaseConfig.setDefaults(Map);用于设置默认配置。

2.在 .xml 文件中的字符串中的双引号 (") 之前使用反斜杠 (\)。

3.类路径 'com.android.tools.build:gradle:3.0.1'替换为

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

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

4.在gradle.properties中添加android.enableAapt2 = false

于 2018-06-22T04:30:25.967 回答