`
Spiritualize_彭韬
  • 浏览: 25723 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

http通信之Json数据解析

 
阅读更多

如何制作Json格式的数据

  利用Google 提供的gson-2.2.4.jar,

    

public class TestJson {

	public static void main(String[] args) {

		Result result = new Result();
		result.setResult(1);
		List<People> peoples = new ArrayList<>();
		People people1 = new People();
		people1.setName("jack");
		people1.setAge(13);
		people1.setUrl("http://hiphotos.baidu.com/9_6kis/pic/item/3b8fe9df2b11c37695ee37c4.jpg");
		List<SchoolInfo> schoolInfo1 = new ArrayList<>();
		SchoolInfo school1 = new SchoolInfo();
		school1.setSchool_name("清华");
		schoolInfo1.add(school1 );
		SchoolInfo school2 = new SchoolInfo();
		school2.setSchool_name("北大");
		schoolInfo1.add(school2 );
		people1.setSchoolInfo(schoolInfo1 );
		peoples.add(people1);
		
		People people2 = new People();
		people2.setName("rose");
		people2.setAge(13);
		people2.setUrl("http://hiphotos.baidu.com/a03713106460/pic/item/772181666066aa0faa184c1d.jpg");
		List<SchoolInfo> schoolInfo2 = new ArrayList<>();
		SchoolInfo school3 = new SchoolInfo();
		school3.setSchool_name("人大");
		schoolInfo2.add(school3 );
		SchoolInfo school4 = new SchoolInfo();
		school4.setSchool_name("交大");
		schoolInfo2.add(school4 );
		people2.setSchoolInfo(schoolInfo2 );
		peoples.add(people2);
		
		result.setPersonData(peoples);
		
		Gson gson = new Gson();
		System.out.println(gson.toJson(result));
	}

}

    制作完成的Json数据放入http://www.bejson.com网站中格式化验证

   结果:

{
    "result": 1,
    "personData": [
        {
            "name": "jack",
            "age": 13,
            "url": "http://hiphotos.baidu.com/9_6kis/pic/item/3b8fe9df2b11c37695ee37c4.jpg",
            "schoolInfo": [
                {
                    "school_name": "清华"
                },
                {
                    "school_name": "北大"
                }
            ]
        },
        {
            "name": "rose",
            "age": 13,
            "url": "http://hiphotos.baidu.com/a03713106460/pic/item/772181666066aa0faa184c1d.jpg",
            "schoolInfo": [
                {
                    "school_name": "人大"
                },
                {
                    "school_name": "交大"
                }
            ]
        }
    ]
}

 

 

1.开启线程访问网络

       访问网络并且将Json格式的数据读取出来,进行Json解析

     

public class HttpJson extends Thread {

    private String url;
    private ListView listView;
    private JsonAdapter adapter ;
    private Handler handler;
    private Context context;
    private static final String TAG = "HttpJson";

    public HttpJson(String url, Context context, ListView listView, JsonAdapter adapter, Handler handler){
        this.url = url;
        this.listView = listView;
        this.adapter = adapter;
        this.handler = handler;
        this.context = context;
    }

    @Override
    public void run() {
        try {
            URL httpurl = new URL(url);
            HttpURLConnection conn = (HttpURLConnection) httpurl.openConnection();
            conn.setRequestMethod("GET");
            conn.setConnectTimeout(5000);
            //从输入流中取得Josn数据
            BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            StringBuffer sb = new StringBuffer();
            String str ;
            while((str = reader.readLine()) != null){
                sb.append(str);
            }
            Log.i(TAG, "run: " + sb.toString());
            final List<People> peoples = parserJson(sb.toString());
            for ( People people : peoples){
                Log.i(TAG, "run: " + people.toString());
            }
            handler.post(new Runnable() {
                @Override
                public void run() {
                    adapter.setPeoples(peoples);
                    listView.setAdapter(adapter);
                }
            });
            reader.close();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 解析Json数据
     * @param json
     */
    private List<People> parserJson(String json) {
        /*
         *{"result":1,"personData":[{"name":"jack","age":13,"url":"http://hiphotos.baidu.com/9_6kis/pic/item/3b8fe9df2b11c37695ee37c4.jpg","schoolInfo":[{"school_name":"清华"},{"school_name":"北大"}]},{"name":"rose","age":13,"url":"http://hiphotos.baidu.com/a03713106460/pic/item/772181666066aa0faa184c1d.jpg","schoolInfo":[{"school_name":"人大"},{"school_name":"交大"}]}]}
         * 可放入www.bejson.com 网站Josn解析器中解析
         */
        try {
            JSONObject jsonObject = new JSONObject(json);
            List<People> peoples=  new ArrayList<>();
            int result = jsonObject.getInt("result");
            if(result == 1) {
                JSONArray personData = jsonObject.getJSONArray("personData");
                for(int i = 0 ;i < personData.length();i++){
                    People peopleObject = new People();
                    peoples.add(peopleObject);
                    JSONObject object = personData.getJSONObject(i);
                    String name = object.getString("name");
                    int age = object.getInt("age");
                    String imageUrl = object.getString("url");
                    peopleObject.setName(name);
                    peopleObject.setAge(age);
                    peopleObject.setUrl(imageUrl);
                    JSONArray schoolInfos = object.getJSONArray("schoolInfo");
                    List<SchoolInfo> schInfos = new ArrayList<>();
                    for(int j = 0;j < schoolInfos.length();j++){
                        JSONObject schoolObject = schoolInfos.getJSONObject(j);
                        SchoolInfo school = new SchoolInfo();
                        String school_name = schoolObject.getString("school_name");
                        Log.i(TAG, "parserJson: " + school_name);
                        school.setSchool_name(school_name);
                        schInfos.add(school);
                    }
                    peopleObject.setSchoolInfo(schInfos);
                }
                return  peoples;
            }else{
                Toast.makeText(context, "error", Toast.LENGTH_SHORT).show();
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return null;
    }
}

 

 

2.接着就是JsonAdapter的实现

   其中就是ListView 的用了,在getView里面,开启线程HttpImage去访问网络加载图片,

     

public class JsonAdapter extends BaseAdapter{

    private static final String TAG = "JsonAdapter";
    private Context context;
    private List<People> peoples;
    private LayoutInflater inflater;
    private Handler handler;

    public JsonAdapter(Context context,Handler handler){
        this.context = context;
        this.handler = handler;
        inflater = LayoutInflater.from(context);
    }

    public List<People> getPeoples() {
        return peoples;
    }

    public void setPeoples(List<People> peoples) {
        this.peoples = peoples;
    }

    @Override
    public int getCount() {
        return peoples.size();
    }

    @Override
    public Object getItem(int position) {
        return peoples.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if(convertView == null){
            convertView = inflater.inflate(R.layout.item_listview,null);
            holder = new ViewHolder(convertView);
            convertView.setTag(holder);
        }else{
            holder = (ViewHolder) convertView.getTag();
        }
        People people = peoples.get(position);
        if(people != null)
            Log.i(TAG, "getView: " + people.toString());
        holder.name.setText(people.getName());
        holder.age.setText("" + people.getAge());
        holder.school1.setText(people.getSchoolInfo().get(0).getSchool_name());
        holder.school2.setText(people.getSchoolInfo().get(1).getSchool_name());
        new HttpImage(people.getUrl(),handler,holder.imageView).start();
        return convertView;
    }

}
class  ViewHolder {
    ImageView imageView;
    TextView name;
    TextView age;
    TextView school1;
    TextView school2;
    public ViewHolder(View view){
        imageView = (ImageView) view.findViewById(R.id.imageView);
        name = (TextView) view.findViewById(R.id.tv_name);
        age = (TextView) view.findViewById(R.id.tv_age);
        school1 = (TextView) view.findViewById(R.id.school1);
        school2 = (TextView) view.findViewById(R.id.school2);
    }
}

 

 

 3.加载图片线程httpImage

 

public class HttpImage extends Thread{

    private String url;
    private Handler handler;
    private ImageView imageView;
    public HttpImage(String url, Handler handler, ImageView imageView) {
        this.url = url;
        this.handler = handler;
        this.imageView = imageView;
    }

    @Override
    public void run() {
        try {
            URL httpurl = new URL(url);
            HttpURLConnection conn = (HttpURLConnection) httpurl.openConnection();
            conn.setRequestMethod("GET");
            conn.setConnectTimeout(5000);
            InputStream in = conn.getInputStream();
            final Bitmap bitmap = BitmapFactory.decodeStream(in);
            handler.post(new Runnable() {
                @Override
                public void run() {
                    imageView.setImageBitmap(bitmap);
                }
            });
            in.close();
        } catch (ProtocolException e) {
            e.printStackTrace();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

   具体的运行结果如下

 



 

 

  • 大小: 142 KB
分享到:
评论

相关推荐

    PB解析json,解析JSON案例,解析jsondemo

    标题中的“PB解析json,解析JSON案例,解析jsondemo”表明了本文主要关注的是PowerBuilder(简称PB)如何处理JSON数据。在现代软件开发中,JSON(JavaScript Object Notation)是一种广泛使用的轻量级数据交换格式,...

    IOS之JSON数据解析

    本文将深入探讨如何在iOS中解析JSON数据,以“IOS之JSON数据解析”为主题,结合标签“源码”和“工具”,我们将讨论如何使用SBJson框架进行JSON的解析。 首先,JSON是一种轻量级的、易于人阅读和编写的数据格式,...

    Qt利用UDP通信来传输JSON数据以及接收并解析JSON数据

    3. 解析接收到的JSON数据,可以使用`QJsonDocument`和`QJsonObject`等类来完成。 4. 处理解析后的数据,根据需要进行响应,然后使用`writeDatagram()`方法向客户端回送数据。 **UDP Client端(Qt Quick)** 1. 同样...

    HttpURLConnection获取json数据解析

    **二、JSON数据解析** JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在Java中,可以使用`org.json`库来解析JSON数据。 1. **导入JSON库**:在...

    用于WINCE下http请求和json解析的可用包

    在Windows CE (WINCE)操作系统环境下,开发网络应用程序时,我们常常需要处理HTTP请求和JSON数据解析。这个压缩包提供了解决这个问题的两个关键组件,它们是Newtonsoft.Json Compact 3.5 For WinCE和System.Web.dll...

    Android JSON数据的封装及解析

    本教程将深入讲解如何在Android中对JSON数据进行封装和解析,以便于在应用程序中有效使用。 一、JSON基础知识 JSON是一种独立于语言的数据表示格式,它基于ECMAScript的一个子集。一个基本的JSON对象由键值对组成,...

    C++实现的服务器post访问并实现JSON数据流解析

    在本文中,我们将深入探讨如何...在给定的项目中,`Httppost`文件很可能是实现这些功能的源代码,包含了POST请求的发送和JSON数据解析的细节。通过分析和理解这个文件,你可以更深入地学习C++在服务器编程中的应用。

    JSON类解析数据文件

    总的来说,JSON类解析数据文件涉及的主要知识点包括:JSON格式规范、JSON数据结构(对象与数组)、编程语言中的JSON解析库、读写文件操作以及JSON对象的遍历和操作。掌握这些知识点能帮助开发者有效地处理JSON数据,...

    http传输与json解析

    4. 转换数据:如果需要将JSON数据转换为Java对象,可以使用`toObject()`方法(需要配合Gson或其他库)。 在实际项目中,我们可能会遇到更复杂的情况,比如处理嵌套的JSON结构、处理网络异常、优化性能等。对于嵌套...

    C++实现http客户端连接服务端及客户端json数据的解析

    此代码用c++实现了http客户端的编写,其中包括了多字节转utf8(已在ExecuteRequest函数中实现,不用再引用所给的编码转换),get和post两种请求方式,后面有json数据的解析以及实现,详情可去博客...

    Json数据解析服务器端加客户端代码

    在这个“Json数据解析服务器端加客户端代码”中,我们可以预见到包含的是关于如何在服务器端和客户端处理JSON数据的代码示例。 在服务器端,JSON数据通常用于接收来自客户端的请求数据,或者作为响应发送回给客户端...

    Json数据解析Demo

    通过理解和熟练运用这些工具,开发者可以在各种场景下有效地处理JSON数据,如API通信、存储和恢复数据、配置文件等。理解JSON的结构,如对象(键值对)和数组,以及如何通过编程语言将它们映射为相应的数据结构,是...

    ios下json数据解析的实例

    本文将深入探讨在iOS环境下如何解析JSON数据,以“ios下json数据解析的实例”为主题,结合提供的代码示例——JsonDemo,进行详细讲解。 首先,我们需要了解JSON的基本结构。JSON是一种轻量级的数据交换格式,它基于...

    PB调用http apiPB解析json

    这一过程涉及到多个技术点,包括网络通信、API接口调用以及JSON数据处理。 1. **PB调用HTTP API**:PowerBuilder支持通过.NET或OLE Automation等方式调用HTTP接口。这通常涉及创建一个对象,如.NET的HttpClient或...

    Java Json解析,Java Web Json解析,Java Web服务端获取Json数据,客户端通过HTTP获取Json数据

    当客户端通过HTTP请求发送JSON数据时,服务端需要解析这些数据。例如,在Servlet中,可以使用HttpServletRequest的getInputStream方法读取请求体,然后通过上述的JSON库进行解析。Spring MVC中,可以使用@Request...

    JSON天气数据包解析

    在这个“JSON天气数据包解析”的项目中,我们主要关注如何使用cJSON库来解析心知天气提供的JSON数据,将其转化为可读的或可操作的形式。 心知天气是一家提供精准气象服务的供应商,它们通过API接口发送JSON格式的...

    Android Http (Json) 服务器端和客户端通信

    3. **错误处理**:在客户端与服务器通信时,必须考虑到网络问题、服务器响应超时、JSON数据解析错误等情况。因此,实现有效的错误处理机制是必要的,以确保应用程序的稳定性和用户体验。 #### 实战技巧与注意事项 ...

    Mixly的JSON数据收发使用说明

    在Mixly这款流行的图形化编程环境中,JSON数据收发功能的加入极大地简化了开发者在进行设备间通信时的工作流程。传统的单片机通信通常需要自定义一系列复杂的帧结构,包括帧头、数据帧、校验帧以及帧尾等部分,虽然...

    VC通过HttpGet和HttpPost方式与WebService通信,解析返回的Json

    在IT行业中,Visual C++(简称VC)是...通过分析和学习这个示例,你可以更好地理解如何在VC环境下实现HttpGet和HttpPost通信,以及如何解析Json数据。这个例子对于理解Web服务交互和Json处理在C++中的应用非常有帮助。

    pb解析json工具

    5. **错误处理**:当JSON数据结构不符合protobuf定义时,工具应能识别并报告错误。 6. **命令行工具**:提供命令行界面,方便开发者在终端进行快速的转换操作。 7. **可视化**:对于复杂的数据结构,可能提供图形...

Global site tag (gtag.js) - Google Analytics