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

安卓使用FastJson解析Json数据并展示到ListView中

2017-02-26 14:54 525 查看
先上效果图:



今天继续讲安卓端解析Json数据,数据存放在tomcat服务器,服务器端采用SSH框架编码完成,由安卓端通过http的GET请求获取到json对象数组,之后就是解析啦,解析完将所有数据存放在实体类中,接下来就是将数据显示在ListView上面了。服务器的搭建比较简单了,其中在action中处理安卓端的get请求,将数据以字节流的方式返回给安卓端.

服务端action代码:

//获取数据,通过json
public String getDataByJson(){
try {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset:UTF-8");
response.setCharacterEncoding("UTF-8");

List<Person> persons=personBiz.getXmlData();
for (Person person : persons) {
System.out.println(person);
}
request.setAttribute("persons", persons);
//Json传输数据至页面
JSONArray jsonArray=new JSONArray();
jsonArray=JSONArray.fromObject(persons);
String str=jsonArray.toString();
response.setCharacterEncoding("UTF-8");
PrintWriter pw=response.getWriter();
pw.write(str);
pw.close();

} catch (Exception e) {
e.printStackTrace();
}
return "success";
}


dao层接口代码:

//查询所有xml数据
public List<Person> getXmlData();


struts.xml中配置action:

<action name="getDataByJson" class="personAction" method="getDataByJson">
<result name="success">/list.jsp</result>
</action>


服务端页面请求代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<center>
<a href="getDataByJson.action">解析Json数据</a>
</center>
</body>
</html>


服务器端页面返回数据页面:

<%@ page language="java" contentType="text/plain; charset=UTF-8" pageEncoding="UTF-8"%>${persons}


运行结果图:



安卓端http的GET请求获取到对象数组,并解析,将数据存放到实体类中:

package com.example.android_parsexml;

import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.util.Xml;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;

import com.alibaba.fastjson.JSON;
import com.google.gson.Gson;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

/**
* Created by Administrator on 2017/2/25.
*/
public class TwoActivity extends AppCompatActivity {

private ListView lv_main_list2;
private List<Person> personList = new ArrayList<Person>();
private ProgressDialog progressDialog;
private MyAdapter myAdapter;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_two);

//获取listview
lv_main_list2 = (ListView) findViewById(R.id.lv_main_list2);
//实例化进度条对话框
progressDialog = new ProgressDialog(this);
progressDialog.setMessage("亲,正在玩命加载中哦!");
//实例化适配器
myAdapter = new MyAdapter();
//设置适配器
lv_main_list2.setAdapter(myAdapter);
}

//自己写个适配器类
class MyAdapter extends BaseAdapter {

@Override
public int getCount() {
return personList.size();
}

@Override
public Object getItem(int i) {
return personList.get(i);
}

@Override
public long getItemId(int i) {
return i;
}

@Override
public View getView(int i, View view, ViewGroup viewGroup) {

LinearLayout layout = new LinearLayout(TwoActivity.this);
layout.setOrientation(LinearLayout.HORIZONTAL);

TextView textViewPage = new TextView(TwoActivity.this);
textViewPage.setText(personList.get(i).getPage() + "\t\t\t\t" + " ");

TextView textViewPname = new TextView(TwoActivity.this);
textViewPname.setText(personList.get(i).getPname() + "\t\t\t\t");

TextView textViewPid = new TextView(TwoActivity.this);
textViewPid.setText(personList.get(i).getPid() + "\t\t\t\t");

layout.addView(textViewPid);
layout.addView(textViewPname);
layout.addView(textViewPage);

return layout;
}
}

//获取xml数据
public void getJson(View view) {
new MyTask().execute();
}

//通过异步任务类获取数据
class MyTask extends AsyncTask {

private Person person;

//准备执行
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog.show();
}

@Override
protected Object doInBackground(Object[] params) {
//获取网络路径
String path = "http://193.168.4.71:8080/S2SH/getDataByJson.action";
//实例化URL
try {
URL url = new URL(path);
//获取连接对象
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
//设置请求方式
httpURLConnection.setRequestMethod("GET");
//设置连接超时
httpURLConnection.setConnectTimeout(5000);
//获取响应码
int code = httpURLConnection.getResponseCode();
if (code == 200) {
//响应成功,获取服务器返回过来的数据
InputStream is = httpURLConnection.getInputStream();
//测试数据
StringBuffer stringBuffer = new StringBuffer();
String str = null;
BufferedReader br = new BufferedReader(new InputStreamReader(is));
while ((str = br.readLine()) != null) {
stringBuffer.append(str);
}

//03.使用fastJson解析Json、
List<Person> persons = JSON.parseArray(stringBuffer.toString(), Person.class);
for (Person pp : persons) {
person = new Person();
int pid = pp.getPid();
String pname = pp.getPname();
int page = pp.getPage();

person.setPid(pid);
person.setPname(pname);
person.setPage(page);
//将结果添加到对象集合中
personList.add(person);
}
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}

@Override
protected void onPostExecute(Object o) {
super.onPostExecute(o);
//通知适配器发生改变
myAdapter.notifyDataSetChanged();
//取消进度条对话框
progressDialog.cancel();
}
}

}


layout.xml代码:

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

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="获取Json数据"
android:onClick="getJson"
/>

<ListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="40dp"
android:id="@+id/lv_main_list2"
></ListView>
</LinearLayout>


实体类代码;

package com.example.android_parsexml;

public class Person {
private int pid;
private String pname;
private int page;

public int getPid() {
return pid;
}

public void setPid(int pid) {
this.pid = pid;
}

public String getPname() {
return pname;
}

public void setPname(String pname) {
this.pname = pname;
}

public int getPage() {
return page;
}

public void setPage(int page) {
this.page = page;
}

public Person() {
super();
}

public Person(String pname, int page) {
super();
this.pname = pname;
this.page = page;
}

@Override
public String toString() {
return "Person [pid=" + pid + ", pname=" + pname + ", page=" + page + "]";
}

}


mainfests 添加权限:

<uses-permission android:name="android.permission.INTERNET"></uses-permission>


注:获取网络路径时,地址为当前网络地址。还有联网权限别忘啦!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息