先说说大体思路
通过工具类获取json格式的字符串后
创建JSONArray对象(将字符串传进去)
获得一个JSONArray类型的数组
遍历数组,获取所有JsonObject
将JsonObject中的数据放到业务Bean对象中
由于安卓开发不允许在子线程中修改UI界面
所以我使用消息传递机制
将解析出来的数据放到业务Bean对象中
通过消息将数据传到主线程
package com.liangfeng.jsonobject;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONObject;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.text.TextUtils;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.Switch;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
protected static final int SUCCESS = 0;
protected static final int ERROR = 1;
// 获取控件
private EditText et_path;
private TextView tv_show;
private List<Person> list;
private Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
//
String show = "";
switch (msg.what) {
case SUCCESS:
list = (ArrayList<Person>) msg.obj;
for (Person p : list) {
Person person = p;
String name = person.getName();
String sex = person.getSex();
String age = person.getAge();
show += "姓名 : " + name + "\n性别 : " + sex + "\n年龄 : " + age
+ "\n----------------------\n";
}
// 设置textView的内容
tv_show.setText(show);
break;
case ERROR:
Toast.makeText(MainActivity.this, "网络错误,请检查连接", 0).show();
break;
}
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化
et_path = (EditText) findViewById(R.id.et_path);
tv_show = (TextView) findViewById(R.id.tv_show);
list = new ArrayList<Person>();
}
// 点击事件
public void click(View view) {
// 获取网络路径
final String path = et_path.getText().toString().trim();
// 判断是否为空
if (TextUtils.isEmpty(path)) {
//
Toast.makeText(this, "网络路径不能为空", 0).show();
return;
}
// 在子线程中进行网络操作
new Thread() {
public void run() {
// 获取URL对象,传入路径
// 获取响应码
try {
URL url = new URL(path);
// 获取httpURL连接
HttpURLConnection connection = (HttpURLConnection) url
.openConnection();
// 设置请求方式get
connection.setRequestMethod("GET");
int code = connection.getResponseCode();
// 判断响应码
if (code == 200) {
// 获取返回的数据流
InputStream stream = connection.getInputStream();
// 将数据流转为字符串
String data = JsonTool.to_String(stream);
// 获取jsonArray对象
JSONArray array = new JSONArray(data);
// 获取jsonObject对象
JSONObject jsonObject = new JSONObject();
// Person person = new Person();
// 遍历数组,解析所有对象
for (int i = 0; i < array.length(); i++) {
Person person = new Person();
jsonObject = array.getJSONObject(i);
// 根据键获取值
String name = jsonObject.getString("name");
String sex = jsonObject.getString("sex");
String age = jsonObject.getString("age");
// 将数据放入对象
person.setName(name);
person.setAge(age);
person.setSex(sex);
//
list.add(person);
}
// 发送消息
Message message = Message.obtain();
message.what = SUCCESS;
message.obj = list;
handler.sendMessage(message);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
//
// 发送消息
Message message = Message.obtain();
message.what = ERROR;
handler.sendMessage(message);
}
};
}.start();
}
}
这里是工具类的代码
package com.liangfeng.jsonobject;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
public class JsonTool {
public static String to_String(InputStream stream) throws Exception {
//获取内存输出流对象
ByteArrayOutputStream baos = new ByteArrayOutputStream();
//设置读取长度
byte [] len = new byte [1024];
//设置接受变量
int b = -1;
//循环读取
while (( b = stream.read(len)) != -1) {
//读取长度 起始位置 字节数据
baos.write(len, 0, b);
}
//关流
baos.close();
stream.close();
System.out.println(baos.toString());
//返回tostring
return baos.toString();
}
}
业务Bean
package com.liangfeng.jsonobject;
public class Person {
private String name;
private String sex;
private String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", sex=" + sex + ", age=" + age + "]";
}
}