gpt4 book ai didi

java - 如何在 Android 上从 HTTP 资源正确解析 XML

转载 作者:行者123 更新时间:2023-11-30 09:49:26 25 4
gpt4 key购买 nike

是什么让我走到这一步:

我编写了一个 XML 网络服务,它提供来自存储在数据库中的 CRM 的数据。 XML Web 服务的目的是让我能够以其他应用程序易于连接和读取的格式向外界提供一组有限的只读数据。 (或者我是这么想的)。

我的具体问题:

我需要在 Android 中编写一个应用程序,它可以从该 Web 服务解析 XML 并在 native 应用程序中将其呈现给我的用户。 连接到网站并将其 XML 提取并解析为对象的推荐方法是什么?

注意事项:

我无法向您展示 XML 示例,因为测试服务器当前不面向 Internet(很快就会)。我也不担心 GUI 开发。我会在将数据发送到手机后解决这个问题 =)。

最佳答案

这是我们的一个 Android 应用程序中的一些 SAX 代码。

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
//. . .
public class MyXmlHandler extends DefaultHandler
{
@Override
public void startDocument()
{
Log.i(TAG,"Starting to parse document.");
}
@Override
public void endDocument()
{
Log.i(TAG,"End of document.");
}
@Override
public void startElement(String uri,String localName,String qName,Attributes attributes)
{
if(localName.equals("myxmltag"))
{
//do something with myxmltag and attributes.
}
}
}
public void parseDocument()
{
try {
URL myxmlUri = new URL("file:///sdcard/appfolder/myxmldoc.xml");
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();
MyXmlHandler myxmlhandler = new MyXmlHandler();
xr.setContentHandler(myxmlhandler);
InputSource inputs = new InputSource(myxmlUri.openStream());
xr.parse(inputs);
// . . .

还有它的下载码

private void downloadFile(String url, String destination) throws ParserConfigurationException, FileNotFoundException, SAXException, UnsupportedEncodingException, ClientProtocolException, IllegalStateException, IOException {
if(isNetworkAvailable(this)){
HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet(url);
MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
get.setHeader("user_id", user_id);
reqEntity.addPart("user_id", new StringBody(user_id));
HttpResponse response = client.execute(get);
HttpEntity resEntity = response.getEntity();
if (resEntity != null) {
String serverResponse = EntityUtils.toString(resEntity);
BufferedWriter out = new BufferedWriter(new FileWriter(destination));
out.write(serverResponse);
out.close();
}
}
}

并且是NetworkAvailable

public static boolean isNetworkAvailable(Context context)
{
ConnectivityManager connectivity = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity == null) {
Log.w("tag", "Connectivity Manager failed to retrieve.");
} else {
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null) {
for (int i = 0; i < info.length; i++) {
if (info[i].getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
}
}
return false;
}

您可能想要编辑 downloadFile,因此如果 isNetworkAvailable 返回 false 会产生一些后果。

编辑:我删除了一些可能妨碍您的代码。我给所有东西都起了一个以“我的”开头的通用名称,而不是我的代码中的名称。

关于java - 如何在 Android 上从 HTTP 资源正确解析 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5791597/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com