Android学习第十八天----JSON解析

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。

JSON建构有两种结构:
json简单说就是javascript中的对象和数组,所以这两种结构就是对象和数组2种结构,通过这两种结构可以表示各种复杂的结构
1、对象:对象在js中表示为“{}”扩起来的内容,数据结构为 {key:value,key:value,...}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为 对象.key 获取属性值,这个属性值的类型可以是 数字、字符串、数组、对象几种。
2、数组:数组在js中是中括号“[]”扩起来的内容,数据结构为 ["java","javascript","vb",...],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是 数字、字符串、数组、对象几种。
经过对象、数组2种结构就可以组合成复杂的数据结构了。
对于网络中的数据,必须自己搭建服务器,然后从自己的服务器上取出数据。
创建实体类,
package cn.will.entity;

public class Books {
    private Integer bookId;
    private String bookName;
    private String bookPrice;
    
    public Books() {
        super();
    }

    public Books(Integer bookId, String bookName, String bookPrice) {
        super();
        this.bookId = bookId;
        this.bookName = bookName;
        this.bookPrice = bookPrice;
    }

    public Integer getBookId() {
        return bookId;
    }

    public void setBookId(Integer bookId) {
        this.bookId = bookId;
    }

    public String getBookName() {
        return bookName;
    }

    public void setBookName(String bookName) {
        this.bookName = bookName;
    }

    public String getBookPrice() {
        return bookPrice;
    }

    public void setBookPrice(String bookPrice) {
        this.bookPrice = bookPrice;
    }

    @Override
    public String toString() {
        return "Books [bookId=" + bookId + ", bookName=" + bookName
                + ", bookPrice=" + bookPrice + "]";
    }
    
}

 

创建服务端的类,

 

package cn.core.service;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.SocketTimeoutException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import cn.core.entity.Books;

public class JSONTextService {

    public static List<Books> getJsonInputStream()
            throws SocketTimeoutException, MalformedURLException, IOException,
            JSONException {
        InputStream is = null;
        URL url = new URL(
                "http://192.168.1.20:8080/javawebjson/XMLServlet?format=json");

        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setConnectTimeout(5000);
        conn.setRequestMethod("GET");
        if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
            is = conn.getInputStream();
        }
        return jsonPrase(is);
    }

    public static List<Books> jsonPrase(InputStream is) throws JSONException,
            IOException {
        List<Books> list = new ArrayList<Books>();
        Books book = null;

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        byte[] b = new byte[1024];

        int len;
        while ((len = is.read(b)) != -1) {
            baos.write(b, 0, len);
        }
        byte[] jsonByte = baos.toByteArray();

        String Str = new String(jsonByte);

        JSONArray jsonArray = new JSONArray(Str);

        for (int i = 0; i < jsonArray.length(); i++) {
            JSONObject jsonObject = jsonArray.getJSONObject(i);
            book = new Books();
            book.setBookId(jsonObject.getInt("id"));
            book.setBookName(jsonObject.getString("name"));
            book.setBookPrice(jsonObject.getString("price"));
            list.add(book);
        }
        return list;
    }
}

mainactivity中

package cn.core.test;

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.SocketTimeoutException;
import java.util.List;

import org.json.JSONException;

import android.app.ListActivity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.ArrayAdapter;
import cn.core.entity.Books;
import cn.core.service.JSONTextService;

public class MainActivity extends ListActivity {

    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {

            setListAdapter(new ArrayAdapter<Books>(MainActivity.this,
                    android.R.layout.simple_list_item_1, (List<Books>) msg.obj));
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        List<Books> list;

        new Thread(new Runnable() {
            @Override
            public void run() {

                try {
                    Message msg = new Message();
                    List mData;
                    mData = JSONTextService.getJsonInputStream();
                    msg.obj = mData;
                    handler.sendMessage(msg);
                } catch (SocketTimeoutException e) {
                    e.printStackTrace();
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (JSONException e) {
                    e.printStackTrace();
                }

            }
        }).start();

    }

}

 

 

posted @ 2013-03-27 20:37  小三小山  阅读(218)  评论(0编辑  收藏  举报