【问题标题】:Can I declare an array to Firebase Remote config?我可以向 Firebase 远程配置声明一个数组吗?
【发布时间】:2017-02-13 10:34:25
【问题描述】:

我是 Android 和 Firebase 的新手。 是否可以在 Firebase 远程配置的 Parameter 键中声明一个数组?

我想为某些特定型号/移动设备提供一些促销活动。因此,如果我可以声明一系列模型(即三星 J5、小米 Note2 等),我可以轻松地在这些模型上启用促销。 请帮帮我。

【问题讨论】:

  • 您可以将其作为字符串传递,然后在客户端通过拆分将其转换为数组。
  • 我建议添加一对新的参数 - 值如下: 参数键:model_for_promotion 值:三星J5,小米Note2。
  • @Dexter,你的意思是我需要为每个模型添加参数?
  • @TOP ,从你的建议中得到了一些想法。让我先试试。谢谢

标签: android firebase firebase-remote-config


【解决方案1】:

远程配置最近添加了通过将键值列表保存为 JSON 格式来保存键值列表的选项。

示例用法:

1.Json存储在Remote Configs中:

 [
      {
        "lesson": "1",
        "versionCode": 2
      },
      {
        "lesson": "2",
        "versionCode": 4
      },
      {
        "lesson": "3",
        "versionCode": 1
      }
 ]

2.Kotlin 模型

data class Lesson(val lesson: Int, val versionCode: Int)

3.获取json

String object = FirebaseRemoteConfig.getInstance().getString("test_json");
Gson gson = new GsonBuilder().create();
List<Lesson> lessons = gson.fromJson(object, new TypeToken<List<Lesson>>(){}.getType());

【讨论】:

  • 我应该如何阅读它?细绳?价值?字节数组?键:ARRAY_CODE 值:{"leccion":"1","versionCode":2} mFirebaseRemoteConfig.getString(ARRAY_CODE);
  • 我尝试读取为字符串,但无法正确解析?您是否有用于将 String 解析为 JSON 的代码,您如何提取差异对象?示例: [{"lesson":"1","versionCode":2}, {"lesson":"2","versionCode":4} , {"lesson":"3","versionCode":1} ]
  • @Cristofer 我已经用您的示例的示例用法更新了我的答案
  • @android_dev 你能详细说明一下吗?我使用 Java 并且 List 无法在 Android Studio 中解决。我应该先创建课程类吗?
  • 是的,你应该首先在 Java 中创建课程类,类似于我为 Kotlin 发布的内容(只需使用 Java 语言而不是 Kotlin)@Gedanggoreng​​span>
【解决方案2】:

Firebase 远程配置中的所有值最终都存储为字符串。布尔值、数字等都归结为字符串。当您请求其他类型时,SDK 只会解析该字符串值。

远程配置中没有“本机”数组。如果你想要一个远程配置参数中的一系列有序值,你应该用可以从字符串值解析的方式来表示它(例如 JSON 或一些简单的分隔字符串)。

【讨论】:

    【解决方案3】:

    Doug's 答案相同,但带有代码。

    这是在 Swift 中,但您仍然应该了解它。

    对于数组,使用分隔字符串,例如

    "iron,wood,gold" 并使用.components(separatedBy: ",") 将其拆分为字符串数组

    对于字典,使用“双重”分隔的字符串,例如

    "iron:50, wood:100, gold:2000"

    使用将其转换为字典

        var actualDictionary = [String: Int]()
    
        // Don't forget the space after the comma
        dictionaryString.components(separatedBy: ", ").forEach({ (entry) in
        let keyValueArray = entry.components(separatedBy: ":")
                return actualDictionary[keyValueArray[0]] = Int(keyValueArray[1])
        })
    
        return actualDictionary
    

    【讨论】:

      【解决方案4】:

      我喜欢N Kuria's 的答案,但这需要你的 json 中的空格是准确的。如果你想要更多容错的东西,这里是通过 JSONSerialization 读取 int 数组的代码。

      假设你的 json 中有这个整数数组:

       {
           "array": [1, 5, 4, 3]
       }
      
      func getArray() -> [Int] {
      
          let jsonString = "{\"array\": [1, 5, 4, 3]}"
          let array = [Int]()
      
          guard let data = jsonString.data(using: .utf8) else { return array }
          if let json = try? JSONSerialization.jsonObject(with: data, options: .mutableContainers) {
              guard let theArray = json as? [String: [Int]] else { return array }
              return theArray.first?.value ?? array
      
              // If you were reading in objects instead of ints, you would do
              // for (key, value) in theArray { /* append values to array */ }
          }
      
          return array
      }
      

      或者,如果您正在读取类类型的值,您可以只枚举字典并在每次迭代时附加到数组中。 (请参阅第一次返回下方的评论。)

      【讨论】:

        【解决方案5】:

        我还推荐 JSON - 因为您可以在解析 JSON 时进行某种错误检测。通过拆分,您永远不会知道这是否导致了正确的数组。

        【讨论】:

        • 这必须作为评论给出,而不是答案......所以downvoting
        猜你喜欢
        • 2022-01-09
        • 1970-01-01
        • 1970-01-01
        • 2011-12-10
        • 1970-01-01
        • 1970-01-01
        • 2015-01-11
        • 2011-03-20
        • 2017-01-24
        相关资源
        最近更新 更多