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

json生成与解析实例

2015-02-02 20:20 357 查看
重点类:JsonWriter,JsonRead,JSONObject,JSONTokener,JSONArray.



流程:

1. 首先在MainActivity.java类中的四个按钮对应的是



前面两个是利用JsonParserUtil.java这个类来生成或者解析json数据

后面两个是利用JsonParserUtil2.java这个类来生成或者解析json数据;

2 .

2. 1) 在初始化时,会准备数据,就是首先先要通过XmlPullParserUtil.java类来读取cd_catalog.xml文件中准备的数据,解析出的数据全部保存在ArrayList<CDEntity> cds;这个对象中;

2. 2) 接着如果点击第一个按钮,利用输出流将调用JsonParserUtil.java类的生成的json数据写入到文件中,

FileOutputStream fout =  new FileOutputStream(file);
JsonParserUtil.WriteJson(cds,fout);  //将ArrayList中的内容写到json文件中
fout.close();

2.2.1)JsonWriter write= new JsonWriter(new OutputStreamWriter(out));第一种生成方式是通过传入一个输出流对象通过JsonWriter类来生成,这个JsonWriter是安卓对象,不是自定义的。

下面这段代码只是为了展示生成的json数据

FileInputStream in = new FileInputStream(file);
String str = StreamUtil.getString(in);  //将json文件中的内容转为字符串
tv.setText(str);




图片1

所以你会看到在底部有一个textview用于展示生成或者解析出的json数据。

2.3)如果点击第二个按钮就是解析保存在SD卡上的数据,成为json数据。

FileInputStream in = new FileInputStream(file);

cds =JsonParserUtil.ReadJson(in);

从file中得到的数据全部保存在了ArrayList<CDEntity>cds;这个对象中;

并且跳转到CDListActivity.java类中展示。

2.3.1)JsonReader read =new JsonReader(new InputStreamReader(in));要想解析file数据第一种方法是通过JsonReader类

2.4)如果点击第三个按钮就是通过第二种方法来将json数据写入到file中,

2.4.1)第二种方法主要是利用了JSONArray这个类,返回值是一个String对象,这个对象里保存着json数据。

String str = null;
//构建jsonArray对象,用来存储数组
JSONArray jArray = new JSONArray();
//用来存放解析出来的entity对象
JSONObject jo = null;
//遍历ArrayList,将每一个entity对象生成jsonObject对象
for(CDEntity entity:cds){
jo = new JSONObject();
jo.put("title", entity.getTitle());
jo.put("artist", entity.getArtist());
jo.put("company", entity.getCompany());
jo.put("country", entity.getCountry());
jo.put("price", entity.getPrice());
jo.put("year", entity.getYear());
//将解析出来的jsonObject对象添加到jsonArray数组中
jArray.put(jo);
}
str = jArray.toString();  //生成json格式字符串
return str;


2.5)如果点击第四个按钮,就是用第二种方式将file中的json数据解析出来,并且跳转到CDListActivity.java类中展示

2.5.1) 第二种解析file中数据成为json数据的方式是:利用一个JSONTokener的类,这个类是一个输入流;

然后利用JSONArray这个类,这是一个数组,用来存放解析出的数据,

然后通过JSONObject这个类来将得到的数据填充进CDEntity这个类中

最后将CDEntity这个类中的数据保存在ArrayList中。

//获取json解析器对象
JSONTokener tokener = new JSONTokener(in);
//通过nextValue可以读取整个对象或者一部分对象(从当前位置开始以后的第一个完整对象或完整文本)
JSONArray jArray = (JSONArray) tokener.nextValue();
CDEntity entity = null;
//循环遍历数组对象,获取每一个json对象进行解析
for(int i = 0;i<jArray.length();i++){
JSONObject jo = (JSONObject) jArray.get(i);
entity = new CDEntity();
//将json对应的key的值取出来,设置为cdentity的属性
entity.setTitle(jo.getString("title"));
entity.setArtist(jo.getString("artist"));
entity.setCompany(jo.getString("company"));
entity.setCountry(jo.getString("country"));
entity.setPrice(Float.parseFloat(jo.getString("price")));
entity.setYear(jo.getInt("year"));
//解析完成,将entity添加到list中
cds.add(entity);
}
return cds;


3. 关于StreamUtil.java这个类有下面几个作用

3.1)从文件中读取数据变为String类型

//从文件中读取输入流
FileInputStream in = new FileInputStream(file);
String str = StreamUtil.getString(in);					cds = JsonParserUtil2.readJson(str);


这变为String类型程序中有两种作用:

第一种就是当将json数据写入到file文件中后,图片1处底部用于展示生成的json数据;

第二种就是上面代码看到的,解析file文件内容时,第二种解析方式需要传入一个String类型,而这个类正好可以把file中的内容变为String类型,然后传入给JsonParserUtil2.java这个类来解析。

代码:

MainActivity.java

package com.example.json_parser;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;

import org.json.JSONException;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Environment;
import android.text.method.ScrollingMovementMethod;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

ArrayList<CDEntity> cds;
private Button btn1;
private Button btn2;
private Button btn3;
private Button btn4;
private TextView tv;

//将解析后的json文件保存到sdcard中,注意操作sdcard需要权限:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
File file = new File(Environment.getExternalStorageDirectory()+File.separator+"cdjson.json");

private void initView(){
btn1 = (Button)findViewById(R.id.button1);
btn2 = (Button)findViewById(R.id.button2);
btn3 = (Button)findViewById(R.id.button3);
btn4 = (Button)findViewById(R.id.button4);
tv = (TextView)findViewById(R.id.textView1);
tv.setMovementMethod(new ScrollingMovementMethod()); //Textview中显示的内容较多,需要滚动才能显示完全。

//生成json文件的按钮
btn1.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
try {
FileOutputStream fout = new FileOutputStream(file);
JsonParserUtil.WriteJson(cds,fout); //将ArrayList中的内容写到json文件中
fout.close();
FileInputStream in = new FileInputStream(file); String str = StreamUtil.getString(in); //将json文件中的内容转为字符串 tv.setText(str);Toast.makeText(MainActivity.this, "json文件生成完毕", 0).show();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});

//解析json文件的按钮
btn2.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
try{
cds = null;
if(!file.exists()){
Toast.makeText(MainActivity.this, "json文件还未生成", 0).show();
return;
}
FileInputStream in = new FileInputStream(file);
cds = JsonParserUtil.ReadJson(in);
Toast.makeText(MainActivity.this, "json解析成功", 0).show();
}catch(Exception e){
e.printStackTrace();
}
Intent intent = new Intent(MainActivity.this,CDListActivity.class);
intent.putExtra("cds", cds);
startActivity(intent);
}
});

//生成json文件的按钮 用第二种解析器
btn3.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
try {
//此处返回的是一长串的json字符串
//[{"year":1985,"title":"Empire Burlesque","price":10.899999618530273,"artist":"Bob Dylan","country":"USA","company":"Columbia"},
//{"year":1988,"title":"Hide your heart","price":9.899999618530273,"artist":"Bonnie Tyler","country":"UK","company":"CBS Records"},.....
//{"year":1987,"title":"Unchain my heart","price":8.199999809265137,"artist":"Joe Cocker","country":"USA","company":"EMI"}]
//就是这种形式的一串串
String str = JsonParserUtil2.writeJson(cds);
FileOutputStream out = new FileOutputStream(file);
ByteArrayInputStream in = new ByteArrayInputStream(str.getBytes());
StreamUtil.getInputStream(in, out);
in.close();
out.close();
tv.setText(str);
Toast.makeText(MainActivity.this, "json文件生成完毕", 0).show();
} catch (JSONException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});

btn4.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
cds = null;
if(!file.exists()){
Toast.makeText(MainActivity.this, "json文件还未生成", 0).show();
return;
}
try {
//从文件中读取输入流
FileInputStream in = new FileInputStream(file);
String str = StreamUtil.getString(in);
cds = JsonParserUtil2.readJson(str);
Toast.makeText(MainActivity.this, "json读取成功", 0).show();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
Intent intent = new Intent(MainActivity.this,CDListActivity.class);
intent.putExtra("cds", cds);
startActivity(intent);
}
});
}

private void init(){
InputStream in;
try {
//通过解析xml文件获取初始数据
in = getAssets().open("cd_catalog.xml");
cds = XmlPullParserUtil.pullParser(in);
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
initView();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

}


CDListActivity.java(用于展示解析出json内容的ListActivity类)

package com.example.json_parser;

import java.util.ArrayList;

import android.app.AlertDialog;
import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.TextView;

/**用来展现专辑信息列表*/
public class CDListActivity extends ListActivity {

private ArrayList<CDEntity> cds;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
cds = (ArrayList<CDEntity>) getIntent().getExtras().get("cds");
setListAdapter(new ArrayAdapter<CDEntity>(CDListActivity.this,android.R.layout.simple_list_item_1,cds));
getListView().setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
View v = getLayoutInflater().inflate(R.layout.dialog_info, null);
CDEntity entity = cds.get(position);
((TextView)v.findViewById(R.id.textView1)).setText("专辑标题:"+entity.getTitle());
((TextView)v.findViewById(R.id.textView2)).setText("专辑歌手:"+entity.getArtist());
((TextView)v.findViewById(R.id.textView3)).setText("专辑国家:"+entity.getCountry());
((TextView)v.findViewById(R.id.textView4)).setText("所属公司:"+entity.getCompany());
((TextView)v.findViewById(R.id.textView5)).setText("价格:"+entity.getPrice());
((TextView)v.findViewById(R.id.textView6)).setText("发布年份:"+entity.getYear());

new AlertDialog.Builder(CDListActivity.this).setTitle("专辑信息").setIcon(android.R.drawable.ic_dialog_info)
.setPositiveButton("确定", null).setView(v).create().show();
}
});
}

}


JsonParserUtil.java(json解析生成的第一种方法)

package com.example.json_parser;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.ArrayList;

import android.util.JsonReader;
import android.util.JsonWriter;

/**用来演示android对json数据的读写操作
* 使用jsonWriter和JsonReader实现json文件的读写(需要android sdk 11及以上才可以使用)
* */
public class JsonParserUtil {

/**将CDEntity对象写入Json流.
* @throws IOException */
private static void getJsonObject(CDEntity entity,JsonWriter write) throws IOException{
//数组对象开始写入前先执行beginObject()方法
write.beginObject();
//以变量名为Key,变量值为value将对象中的属性写入json输出流
write.name("title").value(entity.getTitle());
write.name("artist").value(entity.getArtist());
write.name("country").value(entity.getCountry());
write.name("company").value(entity.getCompany());
write.name("price").value(entity.getPrice());
write.name("year").value(entity.getYear());
//数组对象写入结束需要执行endObject()方法
write.endObject();
}

/**将ArrayList对象写入OutputStream对象 该方法需Sdk11以上可用
* @throws IOException */
public static void WriteJson(ArrayList<CDEntity> cds,OutputStream out) throws IOException{
//通过传入的输出流生成Json字符输出流对象
JsonWriter write = new JsonWriter(new OutputStreamWriter(out));
//写入数组前需要执行beginArray()方法
write.beginArray();
//遍历List,将其中的每一个元素写入输出流
for(CDEntity entity : cds){
getJsonObject(entity,write);
}
//写入数组完成需要执行endArray()方法
write.endArray();
//执行完所有写入操作需要关闭输入流。
write.close();
}

/**将Json数组解析为ArrayList对象 该方法需Sdk11以上可用
* @throws IOException */
public static ArrayList<CDEntity> ReadJson(InputStream in) throws IOException{
ArrayList<CDEntity> cds = new ArrayList<CDEntity>();
//构建json输入流对象
JsonReader read = new JsonReader(new InputStreamReader(in));
//读取数组前需要执行beginArray方法
read.beginArray();
while(read.hasNext()){  //循环读取输入流,并将其加入到ArrayList中,直到输入流中没有数据
cds.add(ReadEntity(read));
}
read.endArray();
return cds;
}

/**将Json输入流解析为CDEntity对象
* @throws IOException */
private static CDEntity ReadEntity(JsonReader read) throws IOException{
CDEntity entity = null;
read.beginObject();
entity = new CDEntity();
while(read.hasNext()){
String key = read.nextName();
if("title".equals(key)){
entity.setTitle(read.nextString());
}else if("artist".equals(key)){
entity.setArtist(read.nextString());
}else if("country".equals(key)){
entity.setCountry(read.nextString());
}else if("company".equals(key)){
entity.setCompany(read.nextString());
}else if("price".equals(key)){
entity.setPrice(Float.parseFloat(read.nextString()));
}else if("year".equals(key)){
entity.setYear(Integer.parseInt(read.nextString()));
}else{
read.skipValue();  //忽略其他key对应的值
}
}
read.endObject();
return entity;
}
}


JsonParserUtil2.java(json解析或者生成的第二种方法)

package com.example.json_parser;

import java.io.InputStream;
import java.util.ArrayList;

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

/**使用JSONObject,JSONArray等来构建json对象。要求android sdk 版本在2.3以上*/
public class JsonParserUtil2 {

/**将json格式的字符串解析*/
public static ArrayList<CDEntity> readJson(String in) throws JSONException{
ArrayList<CDEntity> cds = new ArrayList<CDEntity>();
//获取json解析器对象 JSONTokener tokener = new JSONTokener(in); //通过nextValue可以读取整个对象或者一部分对象(从当前位置开始以后的第一个完整对象或完整文本) JSONArray jArray = (JSONArray) tokener.nextValue(); CDEntity entity = null; //循环遍历数组对象,获取每一个json对象进行解析 for(int i = 0;i<jArray.length();i++){ JSONObject jo = (JSONObject) jArray.get(i); entity = new CDEntity(); //将json对应的key的值取出来,设置为cdentity的属性 entity.setTitle(jo.getString("title")); entity.setArtist(jo.getString("artist")); entity.setCompany(jo.getString("company")); entity.setCountry(jo.getString("country")); entity.setPrice(Float.parseFloat(jo.getString("price"))); entity.setYear(jo.getInt("year")); //解析完成,将entity添加到list中 cds.add(entity); } return cds;}

/**将ArrayList中的内容写入json对象中
* @throws JSONException */
public static String writeJson(ArrayList<CDEntity> cds) throws JSONException{
String str = null; //构建jsonArray对象,用来存储数组 JSONArray jArray = new JSONArray(); //用来存放解析出来的entity对象 JSONObject jo = null; //遍历ArrayList,将每一个entity对象生成jsonObject对象 for(CDEntity entity:cds){ jo = new JSONObject(); jo.put("title", entity.getTitle()); jo.put("artist", entity.getArtist()); jo.put("company", entity.getCompany()); jo.put("country", entity.getCountry()); jo.put("price", entity.getPrice()); jo.put("year", entity.getYear()); //将解析出来的jsonObject对象添加到jsonArray数组中 jArray.put(jo); } str = jArray.toString(); //生成json格式字符串 return str;}

}


CDEntity.java(实体类,用于保存要展示在ListActivity类中的内容)

一般是要解析json内容时,然后暂时保存在这里面

package com.example.json_parser;

import java.io.Serializable;

/**代表专辑的实体类,在进行xml解析时用来封装数据*/
public class CDEntity implements Serializable{

/**
*
*/
private static final long serialVersionUID = 1692431541356358640L;
/**专辑标题*/
private String title;
/**专辑歌手*/
private String artist;
/**专辑国家*/
private String country;
/**唱片公司*/
private String company;
/**价格*/
private float price;
/**年份*/
private int year;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getArtist() {
return artist;
}
public void setArtist(String artist) {
this.artist = artist;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company = company;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}

public CDEntity() {
super();
}
public CDEntity(String title, String artist, String country,
String company, float price, int year) {
super();
this.title = title;
this.artist = artist;
this.country = country;
this.company = company;
this.price = price;
this.year = year;
}
@Override
public String toString() {
return "CD名字:"+title;
}

}


XmlPullParserUtil.java(用来解析XML文件内容的工具类)

package com.example.json_parser;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;

/**android内置了pull解析,相对dom解析来说pull更省内存.*/
public class XmlPullParserUtil {

public static ArrayList<CDEntity> pullParser(InputStream in){
ArrayList<CDEntity> cds = null;
try {
//构建pull解析工厂
XmlPullParserFactory factory;
factory = XmlPullParserFactory.newInstance();
//构建pull解析器对象
XmlPullParser parser =  factory.newPullParser();
//设置解析器的数据源
parser.setInput(new InputStreamReader(in));
//获取事件,开始进行解析
int eventType = parser.getEventType();
//将要生成的CD对象
CDEntity entity = null;
//循环遍历xml文档,直到遍历到文档末尾
while(eventType != XmlPullParser.END_DOCUMENT){
switch(eventType){
//在xml文档开始的时候构建ArrayList对象。
case XmlPullParser.START_DOCUMENT:
cds = new ArrayList<CDEntity>();
break;
//在标签开始时对标签名进行判断
case XmlPullParser.START_TAG:
String name = parser.getName();
//标签名为CD时,构建CD对象
if("CD".equals(name)){
entity = new CDEntity();
//如果标签为title,则cd肯定不为空,且获取到的文本为cd标题,则将cd的标题属性设置为title标签的文本
}else if("TITLE".equals(name)){
entity.setTitle(parser.nextText());
}else if("ARTIST".equals(name)){
entity.setArtist(parser.nextText());
}else if("COUNTRY".equals(name)){
entity.setCountry(parser.nextText());
}else if("COMPANY".equals(name)){
entity.setCompany(parser.nextText());
}else if("PRICE".equals(name)){
entity.setPrice(Float.parseFloat(parser.nextText()));
}else if("YEAR".equals(name)){
entity.setYear(Integer.parseInt(parser.nextText()));
}
break;
//标签结束后,判断结束标签是什么。如果cd标签结束,则生成cd对象完成,应该将其添加到ArrayList中
case XmlPullParser.END_TAG:
if("CD".equals(parser.getName())){
cds.add(entity);
}
break;
}
//循环处理结束后,需要将标签设置为下一个标签,避免无限循环
eventType = parser.next();
}
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(cds);
return cds;
}
}


StreamUtil.java(将生成的文件内容读取或者是将要生成的东西写入文件中)

package com.example.json_parser;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

/**与流处理相关的工具类*/
public class StreamUtil {

/**将给定输入流中的内容转移到给定输出流
* @throws IOException */
public static void getInputStream(InputStream in,OutputStream out) throws IOException{
if(in == null || out == null){
return;
}
//定义缓冲区
byte[] buf = new byte[1024];
int len = -1;
while((len = in.read(buf)) != -1){  //循环读取出入流中的内容,并写入输出流,直到输入流末尾
out.write(buf,0,len);
}
out.flush();
}

/**将输入流中的内容生成字符串
* @throws IOException */
public static String getString(InputStream in) throws IOException{
String str = null;
ByteArrayOutputStream out = new ByteArrayOutputStream();
getInputStream(in, out);
str = new String(out.toByteArray());
in.close();
return str;
}
}


cd_catalog.xml(这里是准备的数据)

首先先要解析此XML文件的数据,然后生成json 数据,所以准备了一个XmlPullParserUtil.java类来解析这里面的数据。

<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited with XML Spy v2007 (http://www.altova.com) -->
<CATALOG>
<CD>
<TITLE>Empire Burlesque</TITLE>
<ARTIST>Bob Dylan</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>Columbia</COMPANY>
<PRICE>10.90</PRICE>
<YEAR>1985</YEAR>
</CD>
<CD>
<TITLE>Hide your heart</TITLE>
<ARTIST>Bonnie Tyler</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>CBS Records</COMPANY>
<PRICE>9.90</PRICE>
<YEAR>1988</YEAR>
</CD>
<CD>
<TITLE>Greatest Hits</TITLE>
<ARTIST>Dolly Parton</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>RCA</COMPANY>
<PRICE>9.90</PRICE>
<YEAR>1982</YEAR>
</CD>
<CD>
<TITLE>Still got the blues</TITLE>
<ARTIST>Gary Moore</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>Virgin records</COMPANY>
<PRICE>10.20</PRICE>
<YEAR>1990</YEAR>
</CD>
<CD>
<TITLE>Eros</TITLE>
<ARTIST>Eros Ramazzotti</ARTIST>
<COUNTRY>EU</COUNTRY>
<COMPANY>BMG</COMPANY>
<PRICE>9.90</PRICE>
<YEAR>1997</YEAR>
</CD>
<CD>
<TITLE>One night only</TITLE>
<ARTIST>Bee Gees</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>Polydor</COMPANY>
<PRICE>10.90</PRICE>
<YEAR>1998</YEAR>
</CD>
<CD>
<TITLE>Sylvias Mother</TITLE>
<ARTIST>Dr.Hook</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>CBS</COMPANY>
<PRICE>8.10</PRICE>
<YEAR>1973</YEAR>
</CD>
<CD>
<TITLE>Maggie May</TITLE>
<ARTIST>Rod Stewart</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>Pickwick</COMPANY>
<PRICE>8.50</PRICE>
<YEAR>1990</YEAR>
</CD>
<CD>
<TITLE>Romanza</TITLE>
<ARTIST>Andrea Bocelli</ARTIST>
<COUNTRY>EU</COUNTRY>
<COMPANY>Polydor</COMPANY>
<PRICE>10.80</PRICE>
<YEAR>1996</YEAR>
</CD>
<CD>
<TITLE>When a man loves a woman</TITLE>
<ARTIST>Percy Sledge</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>Atlantic</COMPANY>
<PRICE>8.70</PRICE>
<YEAR>1987</YEAR>
</CD>
<CD>
<TITLE>Black angel</TITLE>
<ARTIST>Savage Rose</ARTIST>
<COUNTRY>EU</COUNTRY>
<COMPANY>Mega</COMPANY>
<PRICE>10.90</PRICE>
<YEAR>1995</YEAR>
</CD>
<CD>
<TITLE>1999 Grammy Nominees</TITLE>
<ARTIST>Many</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>Grammy</COMPANY>
<PRICE>10.20</PRICE>
<YEAR>1999</YEAR>
</CD>
<CD>
<TITLE>For the good times</TITLE>
<ARTIST>Kenny Rogers</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>Mucik Master</COMPANY>
<PRICE>8.70</PRICE>
<YEAR>1995</YEAR>
</CD>
<CD>
<TITLE>Big Willie style</TITLE>
<ARTIST>Will Smith</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>Columbia</COMPANY>
<PRICE>9.90</PRICE>
<YEAR>1997</YEAR>
</CD>
<CD>
<TITLE>Tupelo Honey</TITLE>
<ARTIST>Van Morrison</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>Polydor</COMPANY>
<PRICE>8.20</PRICE>
<YEAR>1971</YEAR>
</CD>
<CD>
<TITLE>The very best of</TITLE>
<ARTIST>Cat Stevens</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>Island</COMPANY>
<PRICE>8.90</PRICE>
<YEAR>1990</YEAR>
</CD>
<CD>
<TITLE>Stop</TITLE>
<ARTIST>Sam Brown</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>A and M</COMPANY>
<PRICE>8.90</PRICE>
<YEAR>1988</YEAR>
</CD>
<CD>
<TITLE>Bridge of Spies</TITLE>
<ARTIST>T'Pau</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>Siren</COMPANY>
<PRICE>7.90</PRICE>
<YEAR>1987</YEAR>
</CD>
<CD>
<TITLE>Private Dancer</TITLE>
<ARTIST>Tina Turner</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>Capitol</COMPANY>
<PRICE>8.90</PRICE>
<YEAR>1983</YEAR>
</CD>
<CD>
<TITLE>Midt om natten</TITLE>
<ARTIST>Kim Larsen</ARTIST>
<COUNTRY>EU</COUNTRY>
<COMPANY>Medley</COMPANY>
<PRICE>7.80</PRICE>
<YEAR>1983</YEAR>
</CD>
<CD>
<TITLE>Pavarotti Gala Concert</TITLE>
<ARTIST>Luciano Pavarotti</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>DECCA</COMPANY>
<PRICE>9.90</PRICE>
<YEAR>1991</YEAR>
</CD>
<CD>
<TITLE>The dock of the bay</TITLE>
<ARTIST>Otis Redding</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>Atlantic</COMPANY>
<PRICE>7.90</PRICE>
<YEAR>1987</YEAR>
</CD>
<CD>
<TITLE>Picture book</TITLE>
<ARTIST>Simply Red</ARTIST>
<COUNTRY>EU</COUNTRY>
<COMPANY>Elektra</COMPANY>
<PRICE>7.20</PRICE>
<YEAR>1985</YEAR>
</CD>
<CD>
<TITLE>Red</TITLE>
<ARTIST>The Communards</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>London</COMPANY>
<PRICE>7.80</PRICE>
<YEAR>1987</YEAR>
</CD>
<CD>
<TITLE>Unchain my heart</TITLE>
<ARTIST>Joe Cocker</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>EMI</COMPANY>
<PRICE>8.20</PRICE>
<YEAR>1987</YEAR>
</CD>
</CATALOG>


结果:

1.点击通过JsonWriter写入json或者是通过 JSONObject写入json



2.点击通过JsonRead读取json或者通过JSONTokener读取json



3.点击上面菜单的具体条目时:



部分代码解析与注意:

CDListActivity extends ListActivity


这个类是一个ListActivity类,就是相当于ListView。

setListAdapter(new ArrayAdapter<CDEntity>(CDListActivity.this,android.R.layout.simple_list_item_1,cds));


所以在这里可以setAdapter。

getListView().setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
View v = getLayoutInflater().inflate(R.layout.dialog_info, null);
CDEntity entity = cds.get(position);
((TextView)v.findViewById(R.id.textView1)).setText("专辑标题:"+entity.getTitle());
((TextView)v.findViewById(R.id.textView2)).setText("专辑歌手:"+entity.getArtist());
((TextView)v.findViewById(R.id.textView3)).setText("专辑国家:"+entity.getCountry());
((TextView)v.findViewById(R.id.textView4)).setText("所属公司:"+entity.getCompany());
((TextView)v.findViewById(R.id.textView5)).setText("价格:"+entity.getPrice());
((TextView)v.findViewById(R.id.textView6)).setText("发布年份:"+entity.getYear());

new AlertDialog.Builder(CDListActivity.this).setTitle("专辑信息").setIcon(android.R.drawable.ic_dialog_info)
.setPositiveButton("确定", null).setView(v).create().show();
}
});


这里是ListView设置点击具体条目跳出一个对话框然后对话框中会显示具体信息。就是结果的第三个界面。

PS:以上代码来源于DevStore,我是从那里下载的源码然后看的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: