示例数据

Json

{    "result": 1,    "personData": [        {            "name": "nate",            "url": "http://img5.duitang.com/uploads/item/201508/07/20150807093135_G5NMr.png",            "age": 12,            "schoolInfo": [                {                    "school_name": "北大"                },                {                    "school_name": "清华"                }            ]        },        {            "name": "jack",            "url": "http://v1.qzone.cc/avatar/201404/13/11/12/534a00b62633e072.jpg%21200x200.jpg",            "age": 23,            "schoolInfo": [                {                    "school_name": "人大"                },                {                    "school_name": "医大"                }            ]        }    ]}

Xml

<?xml version="1.0"?>  1            nate      http://img5.duitang.com/uploads/item/201508/07/20150807093135_G5NMr.png      12                        北大                          清华                            jack      http://v1.qzone.cc/avatar/201404/13/11/12/534a00b62633e072.jpg%21200x200.jpg      23                        人大                          医大                    

Android解析json及xml源码

TestJsonXmlParseThread.java

调用WCF服务发布的接口获取测试数据。

import android.content.Context;import android.widget.ListView;import org.apache.http.HttpResponse;import org.apache.http.HttpStatus;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpGet;import org.apache.http.client.params.HttpClientParams;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.params.BasicHttpParams;import org.apache.http.params.HttpConnectionParams;import org.apache.http.params.HttpParams;import org.apache.http.util.EntityUtils;import org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject;import org.xmlpull.v1.XmlPullParser;import org.xmlpull.v1.XmlPullParserException;import org.xmlpull.v1.XmlPullParserFactory;import java.io.IOException;import java.io.StringReader;import java.util.ArrayList;import java.util.List;public class TestJsonXmlParseThread extends Thread {    private HttpClient httpClient;    private Context context;    private ListView listView;    public TestJsonXmlParseThread(Context context, ListView listView) {        httpClient = getHttpClient();        this.context = context;        this.listView = listView;    }    @Override    public void run() {        String url = "http://192.168.0.111:8887/service1/";        ResultInfo resultInfo = new ResultInfo();        //解析JSON        String result = doHttpClientGet(url + "GetJsonInfos");        try {            JSONObject jsonObject = new JSONObject(result);            resultInfo.fromJsonObj(jsonObject);        } catch (JSONException e) {            e.printStackTrace();        }        //解析XML//        String result = doHttpClientGet(url + "GetXmlInfos");//        try {//            resultInfo = resultInfo.fromXmlObj(result);//        } catch (XmlPullParserException e) {//            e.printStackTrace();//        } catch (IOException e) {//            e.printStackTrace();//        }        if (resultInfo != null) {            final ResultInfoAdapter adapter = new ResultInfoAdapter(context, resultInfo.personData);            listView.post(new Runnable() {                @Override                public void run() {                    listView.setAdapter(adapter);                }            });        }    }    /**     * 实体对象     */    public class ResultInfo {        public int result;        public List personData;        public ResultInfo fromJsonObj(JSONObject jsonObject) throws JSONException {            if (jsonObject != null) {                result = jsonObject.getInt("result");                personData = new ArrayList<>();                JSONArray jsonArray = jsonObject.getJSONArray("personData");                if (jsonArray != null) {                    for (int i=0; i();                        } else if ("person".equals(name)) {                            person = new Person();                        } else if ("name".equals(name)) {                            person.name = parser.nextText();                        } else if ("url".equals(name)) {                            person.url = parser.nextText();                        } else if ("age".equals(name)) {                            person.age = Integer.valueOf(parser.nextText());                        } else if ("schoolInfo".equals(name)) {                            person.schoolInfo = new ArrayList<>();                        } else if ("school".equals(name)) {                            school = new School();                        } else if ("school_name".equals(name)) {                            school.school_name = parser.nextText();                        }                        break;                    case XmlPullParser.END_TAG:                        if ("person".equals(name)) {                            personData.add(person);                            person = null;                        } else if ("school".equals(name)) {                            person.schoolInfo.add(school);                            school = null;                        }                        break;                }                event = parser.next();            }            return this;        }    }    public class Person {        public String name;        public String url;        public int age;        public List schoolInfo;        public Person fromJsonObj(JSONObject jsonObject) throws JSONException {            if (jsonObject != null) {                name = jsonObject.getString("name");                url = jsonObject.getString("url");                age = jsonObject.getInt("age");                schoolInfo = new ArrayList<>();                JSONArray jsonArray = jsonObject.getJSONArray("schoolInfo");                if (jsonArray != null) {                    for (int i=0; i

WCF服务部分源码

此处只提供Contract和Service的代码,WCF服务的可配置及参考WCF服务端与使用HttpClient的Android客户端简单示例

IWcfService1.cs

using System.Collections.Generic;using System.Runtime.Serialization;using System.ServiceModel;using System.ServiceModel.Web;namespace Contract{    [ServiceContract]    public interface IWcfService1    {        [OperationContract]        [WebGet(            UriTemplate = "GetJsonInfos",            ResponseFormat = WebMessageFormat.Json)]        ResultInfo GetJsonInfos();        [OperationContract]        [WebGet(            UriTemplate = "GetXmlInfos")]   //默认为XML格式        ResultInfo GetXmlInfos();    }    [DataContract(Name = "resultInfo")]    public class ResultInfo    {        [DataMember(Order = 0, Name = "result")]        public int Result;        [DataMember(Order = 1, Name = "personData")]        public List PersonData;    }    [DataContract(Name = "person")]    public class Person    {        [DataMember(Order = 0, Name = "name")]        public string Name;        [DataMember(Order = 1, Name = "url")]        public string URL;        [DataMember(Order = 2, Name = "age")]        public int Age;        [DataMember(Order = 3, Name = "schoolInfo")]        public List SchoolInfo;    }    [DataContract(Name = "school")]    public class School    {        [DataMember(Order = 0, Name = "school_name")]        public string Name;    }}

WcfService1.cs

using Contract;using System.Collections.Generic;namespace Service{    public class WcfService1 : IWcfService1    {        public ResultInfo GetJsonInfos()        {            return getResult();        }        public ResultInfo GetXmlInfos()        {            return getResult();        }        private ResultInfo getResult()         {            ResultInfo resultInfo = new ResultInfo();            resultInfo.Result = 1;            resultInfo.PersonData = new List();            List schoolInfo1 = new List();            schoolInfo1.Add(new School() { Name = "北大" });            schoolInfo1.Add(new School() { Name = "清华" });            Person person1 = new Person()            {                Name = "nate",                URL = "http://img5.duitang.com/uploads/item/201508/07/20150807093135_G5NMr.png",                Age = 12,                SchoolInfo = schoolInfo1            };            resultInfo.PersonData.Add(person1);            List schoolInfo2 = new List();            schoolInfo2.Add(new School() { Name = "人大" });            schoolInfo2.Add(new School() { Name = "医大" });            Person person2 = new Person()            {                Name = "jack",                URL = "http://v1.qzone.cc/avatar/201404/13/11/12/534a00b62633e072.jpg%21200x200.jpg",                Age = 23,                SchoolInfo = schoolInfo2            };            resultInfo.PersonData.Add(person2);            return resultInfo;        }    }}

Android显示解析结果源码

ResultInfoAdapter.java 数据适配器

import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import java.util.List;public class ResultInfoAdapter extends BaseAdapter {    private List list;    private LayoutInflater layoutInflater;    public ResultInfoAdapter(Context context, List persons) {        this.layoutInflater = LayoutInflater.from(context);        this.list = persons;    }    @Override    public int getCount() {        return list.size();    }    @Override    public Object getItem(int i) {        return list.get(i);    }    @Override    public long getItemId(int i) {        return i;    }    @Override    public View getView(int i, View view, ViewGroup viewGroup) {        Holder holder = null;        if (view == null) {            view = layoutInflater.inflate(R.layout.parse_item, null);            holder = new Holder(view);            view.setTag(holder);        } else {            holder = (Holder) view.getTag();        }        TestJsonXmlParseThread.Person person = list.get(i);        holder.txtName.setText("姓名:" + person.name);        holder.txtAge.setText("年龄:" + person.age);        holder.txtSchool1.setText("硕士:" + person.schoolInfo.get(0).school_name);        holder.txtSchool2.setText("本科:" + person.schoolInfo.get(1).school_name);        //加载在线图片        new HttpImageThread(person.url, holder.imageView).start();        return view;    }    class Holder {        private TextView txtName;        private TextView txtAge;        private TextView txtSchool1;        private TextView txtSchool2;        private ImageView imageView;        public Holder(View view) {            txtName = (TextView) view.findViewById(R.id.tv_name);            txtAge = (TextView) view.findViewById(R.id.tv_age);            txtSchool1 = (TextView) view.findViewById(R.id.tv_school1);            txtSchool2 = (TextView) view.findViewById(R.id.tv_school2);            imageView = (ImageView) view.findViewById(R.id.image);        }    }    class HttpImageThread extends Thread {        private ImageView imageView;        private String url;        public HttpImageThread(String url, ImageView imageView) {            this.url = url;            this.imageView = imageView;        }        @Override        public void run() {            try {                URL httpUrl = new URL(url);                HttpURLConnection conn = (HttpURLConnection) httpUrl.openConnection();                conn.setReadTimeout(5000);                conn.setRequestMethod("GET");                InputStream in = conn.getInputStream();                final Bitmap bitmap = BitmapFactory.decodeStream(in);                imageView.post(new Runnable() {                    @Override                    public void run() {                        imageView.setImageBitmap(bitmap);                    }                });            } catch (MalformedURLException e) {                e.printStackTrace();            } catch (IOException e) {                e.printStackTrace();            }        }    }}

TestJsonXmlActivity.java

import android.app.Activity;import android.os.Bundle;import android.widget.ListView;public class TestJsonXmlActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.test_parse);        ListView listView= (ListView) findViewById(R.id.list_json);        new TestJsonXmlParseThread(this, listView).start();    }}

test_parse.xml

<?xml version="1.0" encoding="utf-8"?>    

parse_item.xml

<?xml version="1.0" encoding="utf-8"?>                                    

示例显示结果

Android:json及xml解析示例_第1张图片


参考:

  • http://www.imooc.com/video/8334
  • http://www.imooc.com/video/8335
  • http://blog.csdn.net/love__coder/article/details/6883354

更多相关文章

  1. 自定义progressBar显示静态数据
  2. android之解析json数据格式详解
  3. Android ViewModel使用与源码解析
  4. android 本地存取复杂数据
  5. git android 源码 ssl错误, 重新设置即可
  6. Ubuntu 16.04 配置android 源码开发/编译环境
  7. android 系统数据库
  8. Android 源码里packages里面的结构
  9. android ListView 刷新数据,加载时遇到的数组越界问题

随机推荐

  1. Android 发布应用到市场
  2. 【极客青年】电脑专用的安卓系统-凤凰系
  3. 使用Git之后出现android library引用失败
  4. android之获取设备唯一标识符
  5. android UI进阶之android中隐藏的layout
  6. 文章:开发者眼中的Android手机平台
  7. Android中的WebView进行直接加载网页
  8. Android中的任务和进程详解
  9. Android – 專案的建立與結構
  10. android 自定义menu及 Error parsing XML