android程序中 客户端如何用pull 读取远程服务器上的xml文件? 请给出代码。谢谢。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android程序中 客户端如何用pull 读取远程服务器上的xml文件? 请给出代码。谢谢。相关的知识,希望对你有一定的参考价值。

服务器上的xml文件已生成,现在用pull解析这个xml的代码已经有了,但是不知道如何连接并获取这个xml文件。

可以用 httpclient get到这个xml
然后把这个流交给pull解析器解析就完了
//获取xml文件流
URL url = new URL("http://www.sohu.com");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5* 1000);//设置连接超时
conn.setRequestMethod(“GET”);//以get方式发起请求
if (conn.getResponseCode() != 200) throw new RuntimeException("请求url失败");
InputStream is = conn.getInputStream();//得到网络返回的输入流
conn.disconnect();
//解析xml
List<Person> persons = readXML(is);

public static List<Person> readXML(InputStream inStream)
XmlPullParser parser = Xml.newPullParser();
try
parser.setInput(inStream, "UTF-8");
int eventType = parser.getEventType();
Person currentPerson = null;
List<Person> persons = null;
while (eventType != XmlPullParser.END_DOCUMENT)
switch (eventType)
case XmlPullParser.START_DOCUMENT://文档开始事件,可以进行数据初始化处理
persons = new ArrayList<Person>();
break;
case XmlPullParser.START_TAG://开始元素事件
String name = parser.getName();
if (name.equalsIgnoreCase("person"))
currentPerson = new Person();
currentPerson.setId(new Integer(parser.getAttributeValue(null, "id")));
else if (currentPerson != null)
if (name.equalsIgnoreCase("name"))
currentPerson.setName(parser.nextText());// 如果后面是Text节点,即返回它的值
else if (name.equalsIgnoreCase("age"))
currentPerson.setAge(new Short(parser.nextText()));


break;
case XmlPullParser.END_TAG://结束元素事件
if (parser.getName().equalsIgnoreCase("person") && currentPerson != null)
persons.add(currentPerson);
currentPerson = null;

break;

eventType = parser.next();

inStream.close();
return persons;
catch (Exception e)
e.printStackTrace();

return null;

参考技术A URL url = new URL("此处填写你的xml所在的url");
//返回一个 URLConnection 对象,它表示到 URL 所引用的远程对象的连接。
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//使用 connect 方法建立到远程对象的实际连接
conn.connect();
//返回从此打开的连接读取的输入流。
InputStream is = conn.getInputStream();
以上就是获取了远程的xml文件,接下来的你应该会了
参考技术B 下载的方法,希望可以帮你。

ublic static boolean downServerVersion() throws Exception
apkUrl = readApkUrl();
URL url = new URL(apkUrl);
HttpURLConnection conn = (HttpURLConnection) url
.openConnection();
conn.connect();
int length = conn.getContentLength();
InputStream is = conn.getInputStream();
File file = new File(savePath);
if (!file.exists())
file.mkdir();

String apkFile = saveFileName;
File ApkFile = new File(apkFile);
FileOutputStream fos = new FileOutputStream(ApkFile);
int count = 0;
byte buf[] = new byte[1024];
int numread = is.read(buf);
count += numread;
fos.write(buf, 0, numread);
fos.close();
is.close();
return false;


---------------------------------------------
---------------------------------------------
安卓开发低级写手为你解答。

如何用Echo程序去制作游戏页面?

Echo程序
  Echo程序是网络编程中最基础的案例。建立网络连接后,客户端向服务端发送一行文本,服务端收到后将文本发送回客户端。

  此处Echo程序分为客户端和服务端两个部分,客户端部分使用Unity实现。为了统一,服务端这里用C#实现。

客户端
  在Unity制作简单的UGUI界面。

    需要的UI包括:

    ①ConnectButtion 连接按钮(用于和服务端建立连接)

    ②InputField 输入框

    ③SendButton 发送按钮

    ④Text 文本框 (用于显示服务端返回的文本)

  下面先给出Echo.cs脚本的代码

using System.Collections;using System.Collections.Generic;using UnityEngine;using System.Net.Sockets;using UnityEngine.UI;
public class Echo : MonoBehaviour{

Socket socket;

public InputField InputField;
public Text text;

public void Connection()
{
    //Socket
    socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

    socket.Connect("127.0.0.1",8888);
}


public void Send()
{
    //Send
    string sendStr = InputField.text;
    byte[] sendBytes = System.Text.Encoding.Default.GetBytes(sendStr);
    socket.Send(sendBytes);
  
    //Recv
    byte[] readBuff = new byte[1024];
    int count = socket.Receive(readBuff);
    string recvStr = System.Text.Encoding.Default.GetString(readBuff, 0 , count);
    text.text = recvStr;

    //Close
    socket.Close();

}}1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.

1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
Connection()

  客户端通过socket.connect(远程IP地址,远程端口)来连接服务端。

Send()

  客户端通过socket.Send()发送数据。本方法接受一个byte[]类型的参数指明要发送的内容。所以需要用System.Text.Encoding.Default.GetBytes()把输出到输入框的字符串转换为Byte[]数组,再发送游戏数据。

Receive()

  客户端通过socket.Receive()接收服务端数据。之后使用System.Text.Encoding.Default.GetString(readBuff,0,count)将byte[]数组转换为字符串再显示到屏幕。

Close()

  客户端通过socket.Close()关闭连接。

  随后只需要将Echo.cs脚本拖到场景中任意物体,并给Inputfield和Test两个属性赋值。并给两个按钮添加点击事件,调用Echo组件中相应的方法。

  例如:在www.sangpi.com中加入了ConnectButton的点击事件为调用Echo组件的Connection方法。

服务端
  在MonoDevelop或是Visual Studio等工具中创建一个Console控制台程序。

  服务端代码如下(使用C#)

using System;using System.Net;using System.Net.Sockets;namespace EchoServer{

class MainClass    {
     public static void Main(string[] args)
     {
        Console.WriteLine("Hello world!");

        Socket listenfd = new Socket(AddressFamily.InterNetwork,
     SocketType.Stream, ProtocolType.Tcp);

        //Bind
        IPAddress ipAdr = IPAddress.Parse("127.0.0.1");
        IPEndPoint ipEp = new IPEndPoint(ipAdr, 8888);
        listenfd.Bind(ipEp);
        //Listen
        listenfd.Listen(0);
        Console.WriteLine("[服务器]启动成功”);
        while(true)
        {
            //Accept
            Socket connfd = listendfd.Accept();
            Console.WriteLine("[服务器]Accept");
            //Receive
            byte[] readBuff = new byte[1024];
            int count =  connfd.Receive (readBuff);
            string readStr =

System.Text.Encoding.Default.GetString(readaBuff, 0 , count);

            Console.WriteLine("[服务器接收]"+readStr);
            //Send
            byte[] sendBytes =         System.Text.Encoding.Default.GetBytes(readStr);
            connfd.Send(sendBytes);
         }
       }
  }  }1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.

1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
绑定Bind

  listenfd.Bind(ipEp)将给listenfd套接字绑定IP和端口。这里使用的127.0.0.1是回送地址,指本地机,一般用于测试。

监听Listen

  服务端通过listenfd.Listen(backlog)开启监听,等待客户端连接。backlog表示指定队列中最多可容纳等待接受的连接数。0表示不限制。

应答Accept

  开启监听后,服务器通过listenfd.Accept()接受客户端连接。

IPAddress和IPEndPoint

  使用前者指定IP地址,使用后者指定IP和端口。

测试
  运行服务端和客户端程序。点击客户端的连接按钮,在文本框输入文本再点击发送按钮。服务端会返回你输入的内容到Text内。

后续会尝试看能不能开发!

以上是关于android程序中 客户端如何用pull 读取远程服务器上的xml文件? 请给出代码。谢谢。的主要内容,如果未能解决你的问题,请参考以下文章

如何用电脑操作android手机

如何用java读取客户端上传的rar文件

如何用STVP工具读取STM8单片机中的程序代码

如何用java程序读取带密码(密码已知)的office文档。

android pull 解析xml文件

如何用c读取文件