您的位置:首页 > Web前端 > JavaScript

数组和Json的相互转换

2016-12-14 21:48 381 查看
JSON是一种轻量级的数据交换格式。 JSON采用完全独立于语言的文本格式。网络通信时用到json和数据间的转换。为了更好的理解json的用法,这里分别对类和json转换、数组和json的转换编写 理解,并且尝试获取天气预报的数据。

自定义一个person类:

public class Person {
String name;
int age;
boolean sex;
public void fly() {
System.out.println("I can't fly~~");
}


public class MainActivity extends Activity {

private Button btn1;
private Button btn2;
private Button btn3;
private Button btn4;
private TextView tv1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn1 = (Button) findViewById(R.id.bnt1);
btn2 = (Button) findViewById(R.id.bnt2);
btn3 = (Button) findViewById(R.id.bnt3);
btn4 = (Button) findViewById(R.id.bnt4);
tv1 = (TextView) findViewById(R.id.tv1);

btn1.setOnClickListener(new OnClickListener() {
//          类转化为JSON
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Person p = new Person();
p.age = 20;
p.name = "张三";
p.sex = false;
Gson gson = new Gson();
String str = gson.toJson(p);
tv1.setText(str);

}
});
btn2.setOnClickListener(new OnClickListener() {
//          数组转化为JSON
@Override
public void onClick(View v) {
// TODO Auto-generated method stub

Person p1 = new Person();
p1.age = 20;
p1.name = "张三";
p1.sex = false;

Person p2 = new Person();
p2.age = 20;
p2.name = "李四";
p2.sex = false;

Person p3 = new Person();
p3.age = 20;
p3.name = "王五";
p3.sex = false;

Person[] p = {p1, p2, p3};
Gson gson = new Gson();
String str = gson.toJson(p);
tv1.setText(str);

}
});
btn3.setOnClickListener(new OnClickListener() {
//          JSON转化为类
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String str = tv1.getText().toString();
Gson gson = new Gson();
Person p = gson.fromJson(str, Person.class);
tv1.setText("名字:"+p.name);

}
});
btn4.setOnClickListener(new OnClickListener() {
//json转换为数组
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String str = tv1.getText().toString();
tv1.setText(" ");
Gson gson = new Gson();
List<Person> list = gson.fromJson(str, new TypeToken<List<Person>>(){}.getType());
for(Person p : list){
tv1.append("名字:"+p.name);
}
}
});

}
public void DoGET(View v){
//请求网络中的数据

final Handler handle = new Handler(){
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
String data =  msg.obj.toString();
tv1.setText(data);
Toast.makeText(MainActivity.this, "来了吗?", Toast.LENGTH_SHORT).show();

}
};
//      进行网络的请求和访问,需要在  线程中进行
Thread t = new Thread(new Runnable() {

@Override
public void run() {
// TODO Auto-generated method stub

StringBuffer strbuff = new StringBuffer();
//定义字符串缓冲区
String buf = null;

BufferedReader buff = null;
String str = "http://weather.123.duba.net/static/weather_info/101010100.html";
try {
URL url = new URL(str);
//URL可以理解为指向互联网的指针,存放了真实的网络地址
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//建立了与网络的连接
conn.setConnectTimeout(10000);
conn.setRequestMethod("GET"); //POST GET要大写!!!
conn.setDoInput(true);//以后就可以使用conn.getInputStream().read();设置是否向conn输出。
int code = conn.getResponseCode();//获取url状态响应返回码
if (code == HttpURLConnection.HTTP_OK) {//连接成功

InputStream is = conn.getInputStream();//获得内容的输入流
buff = new BufferedReader(new InputStreamReader(is));//把已经获得的内容输入流存放在输入存储器中,再进一步放入读取缓冲区中
while((buf = buff.readLine()) != null){//如果读取的某一行文本不为空的,则把读取的数据放入缓存中
strbuff.append(buf);
}
}else{
Toast.makeText(MainActivity.this, "请求失败", Toast.LENGTH_SHORT).show();
}

} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if (buff != null) {
try {
buff.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Message msg = new Message();
String data = strbuff.toString();
//Message msg = Message.obtain();
msg.obj = data;
handle.sendMessage(msg);
}
});
t.start();

}


效果图如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  安卓