在我的应用程序中,我已经能够将最喜欢的联系人成功存储到SharedPreferences中的默认位置名为“PACKAGE.xml”的文件中 - > data / data / applicationpackage .... / sharedprefs / PACKAGE。目前,XML如下所示:
<?xml version="1.0" encoding="UTF-8" standalone="true"?>
-<map>
<string name="CONTACT 0">Helen : (432) 341-1343</string>
<string name="CONTACT 2">Alex Zun : 1 234-321-231</string>
<string name="CONTACT 1">Gazer : 1 312-345-452</string>
</map>
我知道我们可以使用XML Parsing或通过SharedPreferences检索数据。 你能帮助我指导哪个是更好的选择,并提供每个案例的样本......
稍后我想将这些数据放到ListView和自定义行布局中。
感谢您的帮助。
答案 0 :(得分:2)
Android Documentation for XMLParsing
文档中有一个示例如何使用 XmlPullParser 和 InputStream 解析xml,您可以轻松地将其更改为从字符串中读取(LINK)
public class XMLParser {
private static final String XML_TO_PARSE = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"true\"?>"
+ "<map>"
+ "<string name=\"CONTACT 0\">Helen : (432) 341-1343</string>"
+ "<string name=\"CONTACT 2\">Alex Zun : 1 234-321-231</string>"
+ "<string name=\"CONTACT 1\">Gazer : 1 312-345-452</string>"
+ "</map>";
private XmlPullParser mParser;
private static final String NS = null;
public XMLParser() {
try {
mParser = Xml.newPullParser();
mParser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
mParser.setInput(new StringReader(XML_TO_PARSE));
} catch(Exception e) {
//
}
}
@SuppressWarnings("unused")
private HashMap<String, String> parse() throws XmlPullParserException, IOException {
HashMap<String, String> hashMap = new HashMap<String, String>();
while (mParser.next() != XmlPullParser.END_TAG) {
if (mParser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
if (mParser.getName().equals("string")) {
readString(mParser, hashMap);
} else {
skip(mParser);
}
}
return hashMap;
}
private void readString(XmlPullParser parser, HashMap<String, String> hashMap) throws IOException, XmlPullParserException {
parser.require(XmlPullParser.START_TAG, NS, "string");
String contactName = parser.getAttributeValue(null, "name");
String contactInfo = parser.getText();
parser.nextTag();
hashMap.put(contactName, contactInfo);
parser.require(XmlPullParser.END_TAG, NS, "string");
}
private void skip(XmlPullParser parser) throws XmlPullParserException, IOException {
if (parser.getEventType() != XmlPullParser.START_TAG) {
throw new IllegalStateException();
}
int depth = 1;
while (depth != 0) {
switch (parser.next()) {
case XmlPullParser.END_TAG:
depth--;
break;
case XmlPullParser.START_TAG:
depth++;
break;
}
}
}
}
PS:我不测试它。
[]&#39; S
答案 1 :(得分:0)
我更新了答案
public static final String PREF_FILE_NAME = "PACKAGE";
SharedPreferences preferences;
int count = 0, i = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView (R.layout.favcontacts_list);
tV_Contacts_list = (TextView) findViewById (R.id.tV_Contacts_list);
preferences = getSharedPreferences(PREF_FILE_NAME, Context.MODE_PRIVATE);
for (count = 0; count <3; count++) {
String contacts_list = preferences.getString("CONTACT "+count, null);
tV_Contacts_list.setTextSize(15);
tV_Contacts_list.append("\n "+ i +". "+ contacts_list);
i++;
}
}
使用上面的代码,我可以检索保存在SharedPreferences文件"PACKAGE.xml"
中的联系人没有问题。
在这里分享我的答案,以便在案件中可以帮助其他人。现在,我的下一个目标是将这些细节带到ListView并通过用户定义的行布局。
谢谢..