我正在尝试在 android 中解析 Preferences Xml 文件,但无法解析 getAttribute Count 方法始终返回零
Posted
技术标签:
【中文标题】我正在尝试在 android 中解析 Preferences Xml 文件,但无法解析 getAttribute Count 方法始终返回零【英文标题】:I am trying to parse Prefrences Xml file in android but not able to parse that getAttributesCount method is always returning zero 【发布时间】:2021-09-10 02:22:42 【问题描述】:我正在尝试在 android 中解析 Preferences Xml 文件,但无法解析 getAttributesCount 方法
k = xmlResourceParser.getAttributeCount();
总是返回零,因为我无法解析该文件。如何成功解析 Preferences 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>
【问题讨论】:
【参考方案1】:请向我们展示您的 XML。也许没有属性?
使用像 1 和 2 这样的常量来识别来自拉解析器的事件不是一个好主意。这意味着任何阅读代码的人都必须去文档中查找,例如,2 表示 START_TAG。
您已经展示了您遇到的第一个开始标记的一些处理过程。此代码似乎没有处于循环中,因此我们无法看到您在处理第一个开始标记后做了什么。
我不是 Android XML 文件格式方面的专家,但在我看到的示例中,第一个元素开始标记没有任何属性。
【讨论】:
key 我已经添加了我要解析的 xml 文件。我是android的初学者,对android中的解析不太了解。请帮我解决这个问题。 感谢您提供额外信息。我无法立即看出你做错了什么。以上是关于我正在尝试在 android 中解析 Preferences Xml 文件,但无法解析 getAttribute Count 方法始终返回零的主要内容,如果未能解决你的问题,请参考以下文章
Flutter java.lang.NoSuchFieldError:无字段PREFER_HIGHEST_OR_REMOTE_VERSION_NO_FORCE_STAGING
无法在 Android Studio 2.0 中解析符号 R [重复]