从局域网中获得服务器中的JSON和XML,进行解析
来源:互联网 发布:多玩tbc数据库 编辑:程序博客网 时间:2024/06/05 02:12
今天使用了如何从服务器中获取资源JSON和XML 的使用方法,对大家会比较有帮助,于是整理一下
首先在Tomcat中新建你的两个文件,当然这里的话是Web后端会做的事
这里就比喻一下
在你的tomcat安装目录apache-tomcat-9.0.0.M20\webapps\ROOT新建一个students.xml文件
<?xml version="1.0" encoding="UTF-8"?><students><student sid="1"><sname>张三</sname><sage>10</sage></student><student sid="2"><sname>李四</sname><sage>9</sage></student><student sid="3"><sname>王五</sname><sage>11</sage></student></students>
和一个students.json文件
{"count":3,"students":[{"sid":1,"sname":"张三","ssex":"女"},{"sid":2,"sname":"李四","ssex":"妖"},
{"sid":3,"sname":"王五","ssex":"无"}]}这两个文件建完之后最好是另存为UTF-8的形式
然后在你的项目中
界面:我这里就以按钮的形式来传递
<Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="获取网络XML数据" android:onClick="getXMLByNet" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="获取网络JSON数据" android:onClick="getJSONByNet" />
后台对应的Activity中
public class MainActivity extends AppCompatActivity { private ProgressDialog pd; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //ProgressDialog是用来在获得数据前的加载 pd = new ProgressDialog(this); pd.setMessage("正在拼命加载中。。。。"); } /** * 根据网络获得XML文件 * @param view */ public void getXMLByNet(View view){ /** * 拿数据是一个耗时操作,耗时的操作一般不在主线程中进行操作 * 所以写一个子线程 */ new MyTask().execute(); } //执行获得XML的子线程 class MyTask extends AsyncTask{ @Override protected Object doInBackground(Object[] objects) { //获取网络XML数据 String path="http://192.168.43.107:8080/students.xml"; try { URL url=new URL(path); HttpURLConnection connection= (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); //设置请求超时的时间 connection.setConnectTimeout(5000); //判断连接的响应码是否为200 状态码200 连接成功 if(connection.getResponseCode()==200){ //获取数据,获得输入流 InputStream is=connection.getInputStream(); /* //打印测试 byte[] bytes=new byte[1024]; int len=0; StringBuffer stringBuffer=new StringBuffer(); while ((len=is.read(bytes))!=-1){ String s=new String(bytes,0,len); stringBuffer.append(s); } Log.i("test",stringBuffer.toString());*/ //解析XML XmlPullParser pullParser=Xml.newPullParser(); //设置转码 pullParser.setInput(is,"UTF-8"); //解析的标签类型 int type=pullParser.getEventType(); //如果不是结束文本,则是标签内容 //循环获得所有的标签 while (type!=XmlPullParser.END_DOCUMENT){ //赋值下一个,细节 type=pullParser.next(); switch (type) { case XmlPullParser.START_TAG: //获取开始标签的名字 String startTagName=pullParser.getName(); if("student".equals(startTagName)){ String sid=pullParser.getAttributeName(0); Log.i("test",sid); }else if("sname".equals(startTagName)){ String sname=pullParser.nextText(); Log.i("test",sname); }else if("sage".equals(startTagName)){ String sage=pullParser.nextText(); Log.i("test",sage); } break; case XmlPullParser.END_TAG: break; } } is.close(); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (XmlPullParserException e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(Object o) { super.onPostExecute(o); } } //获得从网络获得的JSON public void getJSONByNet(View view){ //new MyJsonTask原因如上 new MyJsonTask().execute(); } class MyJsonTask extends AsyncTask{ @Override protected void onPreExecute() { //在准备的时间段进行展示 pd.show(); } @Override protected Object doInBackground(Object[] objects) { //获取网络JSON数据 String path="http://192.168.43.107:8080/students.json"; try { URL url=new URL(path); HttpURLConnection connection= (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setConnectTimeout(5000); if(connection.getResponseCode()==200){ InputStream is=connection.getInputStream(); byte[] bytes=new byte[1024]; int len=0; StringBuffer stringBuffer=new StringBuffer(); while ((len=is.read(bytes))!=-1){ String s=new String(bytes,0,len); stringBuffer.append(s); } Log.i("test",stringBuffer.toString()); //Gson FastJson //解析JSON //这里用的是阿里巴巴的FastJson.jar包 //解析 BigObject bigObject=JSON.parseObject(stringBuffer.toString(),BigObject.class); //stringBuffer.toString(),去获得属性进行打印 int count=bigObject.getCount(); Log.i("test",count+""); List<Student> students=bigObject.getStudents(); for (Student student : students) { Log.i("test",student.getSname()); } } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(Object o) { //执行了的时候就取消 pd.cancel(); super.onPostExecute(o); } }}两个对象
这两个对象是用来接收JSON进行转换的
import java.util.List;/** * Created by Administrator on 2017/7/26 0026. */public class BigObject { private int count; private List<Student> students; public BigObject() { } public BigObject(int count, List<Student> students) { this.count = count; this.students = students; } public int getCount() { return count; } public void setCount(int count) { this.count = count; } public List<Student> getStudents() { return students; } public void setStudents(List<Student> students) { this.students = students; }}
/** * Created by Administrator on 2017/7/26 0026. */public class Student { private int sid; private String sname; private String ssex; public Student() { } public Student(int sid, String sname, String ssex) { this.sid = sid; this.sname = sname; this.ssex = ssex; } public int getSid() { return sid; } public void setSid(int sid) { this.sid = sid; } public String getSname() { return sname; } public void setSname(String sname) { this.sname = sname; } public String getSsex() { return ssex; } public void setSsex(String ssex) { this.ssex = ssex; }}
最后,进行配置<uses-permission android:name="android.permission.INTERNET"></uses-permission>
然后在后台,你就可以拿到XML和JSON 中的值,去做要做的操作了
阅读全文
0 0
- 从局域网中获得服务器中的JSON和XML,进行解析
- android的从服务器取得json对象进行解析
- android的从服务器取得json对象进行解析
- android的从服务器取得json对象进行解析
- iOS开发中 使用XML和JSON对本地文件进行解析
- IOS 中 JSON 和 XML 解析
- Android获得json和XML
- JSON 之 SuperObject(14): 从 XML 中解析
- xml和json解析
- json和xml解析
- XML和JSON解析
- json和xml解析
- json和xml解析
- JSON和XML解析
- XML和JSon解析
- XML和json解析
- JSON和XML解析
- xml和json解析
- 【转】使用AWS、Docker与Rancher提供弹性的生产级服务
- 查看idea的后台任务
- Linux网络编程-UDP接收数据丢包解决方案
- js中巧用cssText属性批量操作样式
- 剑指offer-数组中重复的数字
- 从局域网中获得服务器中的JSON和XML,进行解析
- 命令行运行jar包(idea+gradle)的两种方式
- 古文觀止卷七_阿房宮賦_杜牧
- ThinkPHP的路由
- hdu 2009 求数列的和
- 摄像机原理与视频运动模糊的解释
- 集群基础-----(iscsi远程共享存储)
- bootstrap分页的要求也适用于基本分页
- I/O阻塞非阻塞与异步 epoll总结 ET/LT AStar提速