繁体   English   中英

我正在尝试在 android 中解析 Prefrences Xml 文件,但无法解析 getAttributesCount 方法总是返回零

[英]I am trying to parse Prefrences Xml file in android but not able to parse that getAttributesCount method is always returning zero

我正在尝试在 android 中解析首选项 Xml 文件,但无法解析该 getAttributesCount 方法

{ k = xmlResourceParser.getAttributeCount(); }

总是返回零,因为我无法解析该文件。 如何成功解析该首选项 xml 文件?

XmlResourceParser xmlResourceParser = Context.getResources().getXml(paramInt); 
String key = null;
String title = null; 
String summary = null; 
String attributeName = null;

try {
    do {
        xmlResourceParser.next();
        i = xmlResourceParser.next();
                       
    } while (i != xmlResourceParser.START_TAG && i != xmlResourceParser.END_DOCUMENT);
} catch (IOException e) {
    e.printStackTrace();
} catch (XmlPullParserException e) {
    e.printStackTrace();
}
    
if (i == 1) {
    return;
}

if (i == 2) {
    k = xmlResourceParser.getAttributeCount();
    Log.d("attributesCount", String.valueOf(k));

    for (int j = 0; j < k; j++) {
        Log.d("attriute name", xmlResourceParser.getAttributeName(j));

        if (xmlResourceParser.getAttributeNamespace(j).equals(ANDROID_SCHEME)) {
            attributeName = xmlResourceParser.getAttributeName(j);

            if (attributeName.equals("key")) {
                key = xmlResourceParser.getAttributeValue(i);
                Log.d("key", key);
            } 

            if (attributeName.equals("title")) {
                title = xmlResourceParser.getAttributeValue(i);
                Log.d("Title inside method", title);
            }

            if (attributeName.equals("summary")) {
                summary = xmlResourceParser.getAttributeValue(i);
            }
        }
    }
}

这是我要解析的 Xml 文件。 在 Android 中,我使用这个 xml 文件进行用户设置。

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

<!--below line is to create preference category-->
<PreferenceCategory android:title="General">

    <!--in below line we are creating a list preference
        and we are adding default selected value in list for 3 rd index-->
    <!--dialog title is to set title for our dialog box
        entries is used to add list of data which we
        are adding from our strings file
        entry values is to add values to our entries.
        key is use to add key to our list preferences
        summary is use to add description to our option
        title is use to add title to our list preferences.-->
    <!--this list preference is for remind me option-->
    <ListPreference
        android:defaultValue="3"
        android:dialogTitle="@string/remind_to_take_a_break"
        android:entries="@array/pref_remind_me_to_take_a_break"
        android:entryValues="@array/pref_duration"
        android:key="@string/key_upload_quality"
        android:summary="@string/remind_me"
        android:title="@string/remind_me" />

    <!--on below line we are creating a switch preference
        default value is use to set switch on or off
        key is use to set key
        title is use to add title to our switch-->
    <!--this switch preference option is to remind for a bed time-->
    <SwitchPreference
        android:defaultValue="false"
        android:key="@string/remind_me_for_bed_time"
        android:title="@string/remind_for_bed_time" />

    <!--below switch preference is
        use for mobile data usage-->
    <SwitchPreference
        android:defaultValue="false"
        android:key="@string/limit_data_usage"
        android:summary="@string/stream_video"
        android:title="@string/limit_mobile_usage" />

    <!--below list preference is use for
        double tap to seek option-->
    <ListPreference
        android:defaultValue="1"
        android:dialogTitle="@string/double_tap_to_seek"
        android:entries="@array/pref_seek_values"
        android:entryValues="@array/pref_duration"
        android:key="@string/pref_seek_val"
        android:summary="@string/seconds"
        android:title="@string/double_tap_to_seek" />

    <!--below option is use to create a list
        preference for Upload preferences-->
    <ListPreference
        android:defaultValue="1"
        android:dialogTitle="@string/uploads"
        android:entries="@array/pref_uploads"
        android:entryValues="@array/pref_duration"
        android:key="@string/pref_uploads"
        android:summary="@string/specify_network_prefs"
        android:title="Uploads" />

    <!--below switch preferences is use to restrict mode-->
    <SwitchPreference
        android:defaultValue="false"
        android:key="@string/prefs_restricted_mode"
        android:summary="@string/restricated_mode"
        android:title="@string/restricated_mode_description" />

    <!--below switch pref is use for enable stats option-->
    <SwitchPreference
        android:defaultValue="false"
        android:key="@string/prefs_enable_stats"
        android:title="@string/enable_stats" />

</PreferenceCategory>

</PreferenceScreen>

请向我们展示您的 XML。 也许没有属性?

使用 1 和 2 之类的常量来识别来自 pull 解析器的事件并不是一个好主意。 这意味着任何阅读代码的人都必须去文档中查找,例如,2 表示 START_TAG。

您已经展示了您遇到的第一个开始标记的一些处理过程。 这段代码似乎没有循环,所以我们看不到你在处理第一个开始标签后做了什么。

我不是 Android XML 文件格式方面的专家,但在我看到的示例中,第一个元素开始标记没有任何属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM