可以使用普通的json解析方法即JsonObject和JsonArray的配合使用,这对于解析小数据的json数据还是比较实用,但是当解析json数据比较复杂的时候使用Gosn比较好,如果大家感兴趣的话网上有大量的实例可以到网上去看看。
首先客户端也要导入gson的两个jar包,json的jar就不需要导入了(因为android项目中已经集成了json的jar包所以这里无需导入)
用到JsonObject和JsonArray区别
区别在于JSONObject是一个{}包裹起来的一个对象(Object),而JSONArray则是[]包裹起来的一个数组(Array),知道这点区别,相信在您以后应用Struts-json的时候,一定不会出现前台得到的数据不能显示这样的问题了,因为通常这样的问题都是因为json数据格式不正确引起的
第一种
1.工具类HttpUtil
public static AsyncHttpClient client=new AsyncHttpClient();
static{
//设置连接超时时间
client.setTimeOut(30000);
}
public static void post(String url,RequestParams params,JsonHttpResponseHandler responseHandler){
client.post(getAbsoluteUrl(url),params,responseHandler);
}
2.MainActivity类
private JSONArray jsonObj;
private List<FindContact> fc;
private List<FindContact> fc2;
JSONObject postData = new JSONObject();
RequestParams para=new RequestParams();//来获取参数是一种比较有效的途径
postData.put("pageNo",pageNo);
para.put("postData",postData.toString());
HttpUtil.post(String url,RequestParams params,responseHandler,new JsonHttpResponseHandler(){
public void onSuccess(int arg0,JSONObject arg1){
if(arg1.get("arg1.get("Status").toString().equals("0")")){
jsonObj=arg1.getJSONArray("postData");//通过arg1对象的getJSONArray()方法将接口数据转换为数组的形式,返回一个jsonArray对象
//解析实体类
fc2=JSON.parseArray(jsonObj.toString(),FindContact.class);
//此处为什么要用for循环来将fc2中的数据放入fc中?
//因为fc2中的数据时从接口的实体类返回过来的
for(int i=0;i<fc2.size(),i++){
fc.add(fc2.get(i));
将fc中的数据塞进适配器中....
}
}
}
}
){
};
第二种
1.工具类同上
2.MainActivity类
private ArrayList<TaskEntity> mList = new ArrayList<TaskEntity>();
mList.clear();
final ArrayList<TaskEntity> tmpArray=new ArrayList<TaskEntity>();
String urlString=ApiConstant.URL+ApiConstant.findTasks;
RequestParams params=new RequestParams();//绑定参数
params.put("memberId",userId);
HttpUtil.get(urlString,params,new JsonHttpResponseHandler(){
public void onSuccess(JSONObject jObj){//获取数据成功会调用
JSONArray jsonArray=jObj.getJSONArray("Data");//将接口数据转化为数组
//此处for循环难道是要将数据塞进实体类中
for(int i=0;i<jsonArray.length();i++){
TaskEntity task=new TaskEntity();
JSONObject jsonObj=(JSONObject)jsonArray.opt(i);
if(jsonObject.getString("type").equals("0")&&!jsonObject.getString("id").equals("6f169b686bb44af880d0af37b65de821")){
task.setMessage(jsonObject.getString);
task.setDone(jsonObject.getBoolean("finished"));
task.setPoint(jsonObject.getString("point"));
task.setDescription(jsonObject.getString("description");
tmpArray.add(task);//将从接口的实体类中的数据塞进tmpArray集合中
}
}
if(tmpArray!=null){
for(TaskEntity tt:tmpArray){//for循环遍历tmpArray
mList.add(tt);//将数据塞进mList集合中
}
}
}
});
第三种,使用Gson,解析复杂的形式
如:
{
"error": 0,
"status": "success",
"date": "2014-05-10",
"results": [
{
"currentCity": "南京",
"weather_data": [
{
"date": "周六(今天, 实时:19℃)",
"dayPictureUrl": "http://api.map.baidu.com/images/weather/day/dayu.png",
"nightPictureUrl": "http://api.map.baidu.com/images/weather/night/dayu.png",
"weather": "大雨",
"wind": "东南风5-6级",
"temperature": "18℃"
},
{
"date": "周日",
"dayPictureUrl": "http://api.map.baidu.com/images/weather/day/zhenyu.png",
"nightPictureUrl": "http://api.map.baidu.com/images/weather/night/duoyun.png",
"weather": "阵雨转多云",
"wind": "西北风4-5级",
"temperature": "21 ~ 14℃"
}
]
}
]
1.定义如下一些的javaBean数据
Status.java
- private String error;
- private String status;
- private String date;
- private List<Results> results;
- public String getError()
- {
- return error;
- }
- public void setError(String error)
- {
- this.error = error;
- }
- public String getStatus()
- {
- return status;
- }
- public void setStatus(String status)
- {
- this.status = status;
- }
- public String getDate()
- {
- return date;
- }
- public void setDate(String date)
- {
- this.date = date;
- }
- public List<Results> getResults()
- {
- return results;
- }
- public void setResults(List<Results> results)
- {
- this.results = results;
- }
- @Override
- public String toString()
- {
- return "Status [error=" + error + ", status=" + status
- + ", date=" + date + ", results=" + results + "]";
- }
- private String error;
- private String status;
- private String date;
- private List<Results> results;
- public String getError()
- {
- return error;
- }
- public void setError(String error)
- {
- this.error = error;
- }
- public String getStatus()
- {
- return status;
- }
- public void setStatus(String status)
- {
- this.status = status;
- }
- public String getDate()
- {
- return date;
- }
- public void setDate(String date)
- {
- this.date = date;
- }
- public List<Results> getResults()
- {
- return results;
- }
- public void setResults(List<Results> results)
- {
- this.results = results;
- }
- @Override
- public String toString()
- {
- return "Status [error=" + error + ", status=" + status
- + ", date=" + date + ", results=" + results + "]";
- }
- public class Results
- {
- private String currentCity;
- private List<Weather> weather_data;
- public String getCurrentCity()
- {
- return currentCity;
- }
- public void setCurrentCity(String currentCity)
- {
- this.currentCity = currentCity;
- }
- public List<Weather> getWeather_data()
- {
- return weather_data;
- }
- public void setWeather_data(List<Weather> weather_data)
- {
- this.weather_data = weather_data;
- }
- @Override
- public String toString()
- {
- return "Results [currentCity=" + currentCity + ", weather_data="
- + weather_data + "]";
- }
- public class Weather {
- private String date;
- private String dayPictureUrl;
- private String nightPictureUrl;
- private String weather;
- private String wind;
- private String temperature;
- public String getDate() {
- return date;
- }
- public void setDate(String date) {
- this.date = date;
- }
- public String getDayPictureUrl() {
- return dayPictureUrl;
- }
- public void setDayPictureUrl(String dayPictureUrl) {
- this.dayPictureUrl = dayPictureUrl;
- }
- public String getNightPictureUrl() {
- return nightPictureUrl;
- }
- public void setNightPictureUrl(String nightPictureUrl) {
- this.nightPictureUrl = nightPictureUrl;
- }
- public String getWeather() {
- return weather;
- }
- public void setWeather(String weather) {
- this.weather = weather;
- }
- public String getWind() {
- return wind;
- }
- public void setWind(String wind) {
- this.wind = wind;
- }
- public String getTemperature() {
- return temperature;
- }
- public void setTemperature(String temperature) {
- this.temperature = temperature;
- }
- @Override
- public String toString() {
- return "Weather [date=" + date + ", dayPictureUrl="
- + dayPictureUrl + ", nightPictureUrl="
- + nightPictureUrl + ", weather=" + weather
- + ", wind=" + wind + ", temperature=" + temperature
- + "]";
- }
- public class MainActivity extends Activity
- {
- private Button tojson;
- RequestQueue mQueue;
- StringRequest stringRequest;
- Gson gson;
- String str;
- @Override
- protected void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- tojson = (Button)findViewById(R.id.tojson);
- gson = new Gson();
- mQueue = Volley.newRequestQueue(MainActivity.this);
- //http://10.19.20.12/upgrade/test.txt是测试使用的json数据
- stringRequest = new StringRequest("http://10.19.20.12/upgrade/test.txt",
- new Response.Listener<String>()
- {
- @Override
- public void onResponse(String response)
- {
- Log.d("TAG", response);
- System.out.println("response="+response);
- Status status = gson.fromJson(response, Status.class);
- System.out.println("status="+status);
- System.out.println("-------------------------------------");
- List<Results> result = status.getResults();
- System.out.println("result="+result);
- }
- },
- new Response.ErrorListener()
- {
- @Override
- public void onErrorResponse(VolleyError error)
- {
- Log.e("TAG", error.getMessage(), error);
- }
- });
- tojson.setOnClickListener(new OnClickListener()
- {
- @Override
- public void onClick(View v)
- {
- mQueue.add(stringRequest);
- }
- });
- }
- }