数据通过ShPrefs或XML Parser检索SharedPreferences中存储的数据

时间:2014-07-06 02:15:00

标签: android sharedpreferences

在我的应用程序中,我已经能够将最喜欢的联系人成功存储到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和自定义行布局中。

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

Android Documentation for XMLParsing

文档中有一个示例如何使用 XmlPullParser InputStream 解析xml,您可以轻松地将其更改为从字符串中读取(LINK

Something like this:

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并通过用户定义的行布局。

谢谢..