2017-06-16 74 views
0

Firebase远程配置有一个方法来返回一组密钥。但它只返回服务器端存在的密钥。 (我在remoteconfig_defaults.xml定义的键没有。)getKeysByPrefix不会返回默认值,只有远程值

使用的代码:

FirebaseRemoteConfig instance = FirebaseRemoteConfig.getInstance(); 
instance.setDefaults(R.xml.remoteconfig_defaults); 
Set<String> keysSet = instance.getKeysByPrefix(""); 

和xml:

<defaultsMap xmlns:android="http://schemas.android.com/apk/res/android"> 
<entry> 
    <key>loading_phrase</key> 
    <value>Fetching config…</value> 
</entry> 
... 
</defaultsMap> 

如何得到的钥匙任何想法默认也是?

回答

0

由于默认值为XML,因此可以使用XML解析器获取密钥。

public static Set<String> getDefaultKeys(Context context, @XmlRes int xmlRes) { 
    Set<String> keys = new HashSet<>(); 
    XmlResourceParser xmlResourceParser = context.getResources().getXml(xmlRes); 
    try { 
     boolean isInKeyTag = false; 
     while (xmlResourceParser.getEventType() != XmlResourceParser.END_DOCUMENT) { 
      if (xmlResourceParser.getEventType() == XmlResourceParser.START_TAG) { 
       String tagName = xmlResourceParser.getName(); 
       if (tagName.equals("key")) { 
        isInKeyTag = true; 
       } 
      } 
      if (xmlResourceParser.getEventType() == XmlResourceParser.END_TAG){ 
       String tagName = xmlResourceParser.getName(); 
       if (tagName.equals("key")){ 
        isInKeyTag = false; 
       } 
      } 
      if (xmlResourceParser.getEventType() == XmlResourceParser.TEXT){ 
       if (isInKeyTag){ 
        String key = xmlResourceParser.getText(); 
        keys.add(key); 
       } 
      } 
      xmlResourceParser.next(); 
     } 
     return keys; 
    } catch (Exception e) { 
     return null; 
    } 
}