您的位置:首页 > 移动开发 > Android开发

Android使用JSON进行数据解析

2013-06-04 12:31 701 查看
Android使用JSON进行数据解析

一、Json数据格式的定义

Json的全称:JavaScript Object Notation

Json建构于两种结构:对象(“名称/值”对的集合)和数组(值得有序列表)

1.Json对象是一个无序“名称/值对”的集合。如: {“name”: “jack”, “age”:100}

2.数组是值得有序结合。如:{“students”:[{“name”: “jack”, “age”:100} ,{“name”: “tom”, “age”:10}]}
下面我们通过访问一个JSON数据的网址连接来进行数据解析并在Android客户端进行显示(id、pinyin、name)



完成效果:



布局文件:main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="ID" />

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="NAME" />

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="PINYIN" />
</LinearLayout>

<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="?android:attr/listDivider" />

<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

</LinearLayout>


cell.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >

<TextView
android:id="@+id/id"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />

<TextView
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />

<TextView
android:id="@+id/pinyin"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />

</LinearLayout>


HttpUtils类
public class HttpUtils {

public static String getJsonString(String path) {
try {
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(3000);
conn.setRequestMethod("GET");
conn.setDoInput(true);
if (conn.getResponseCode() == 200) {
return changeInputStream(conn.getInputStream());
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "";
}

private static String changeInputStream(InputStream inputStream) {
// TODO Auto-generated method stub
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
String jsonString = "";
int len = 0;
byte[] data = new byte[1024];
try {
while ((len = inputStream.read(data)) != -1) {
outputStream.write(data, 0, len);
}
jsonString = new String(outputStream.toByteArray());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return jsonString;
}
}


JsonTools类
public class JsonTools {

public static List<City> getListPersons(String key, String jsonString) {
List<City> list = new ArrayList<City>();
try {
JSONObject object = new JSONObject(jsonString);
JSONArray array = object.getJSONArray(key);
for (int i = 0; i < array.length(); i++) {
JSONObject jsonObject = array.getJSONObject(i);
City city = new City();
city.setId(jsonObject.getInt("id"));
city.setName(jsonObject.getString("name"));
city.setPinyin(jsonObject.getString("pinyin"));
list.add(city);
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
}


实体类City
public class City {
private String name;
private int id;
private String pinyin;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getPinyin() {
return pinyin;
}

public void setPinyin(String pinyin) {
this.pinyin = pinyin;
}

@Override
public String toString() {
return "City [name=" + name + ", id=" + id + ", pinyin=" + pinyin + "]";
}

public City(String name, int id, String pinyin) {
super();
this.name = name;
this.id = id;
this.pinyin = pinyin;
}

public City() {
super();
}

}


MainActivity
public class MainActivity extends Activity {

private ListView listView;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
listView = (ListView) findViewById(R.id.listview);

List<Map<String, Object>> data = new ArrayList<Map<String, Object>>();

String path = "这里填写JSON数据的网址连接";
List<City> cities = JsonTools.getListPersons("cities",
HttpUtils.getJsonString(path));

for (City city : cities) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("ID", city.getId());
map.put("NAME", city.getName());
map.put("PINYIN", city.getPinyin());

data.add(map);
}

SimpleAdapter adapter = new SimpleAdapter(MainActivity.this, data,
R.layout.cell, new String[] { "ID", "NAME", "PINYIN" },
new int[] { R.id.id, R.id.name, R.id.pinyin });
listView.setAdapter(adapter);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: