安卓使用FastJson解析Json数据并展示到ListView中
2017-02-26 14:54
525 查看
先上效果图:
今天继续讲安卓端解析Json数据,数据存放在tomcat服务器,服务器端采用SSH框架编码完成,由安卓端通过http的GET请求获取到json对象数组,之后就是解析啦,解析完将所有数据存放在实体类中,接下来就是将数据显示在ListView上面了。服务器的搭建比较简单了,其中在action中处理安卓端的get请求,将数据以字节流的方式返回给安卓端.
服务端action代码:
dao层接口代码:
struts.xml中配置action:
服务端页面请求代码:
服务器端页面返回数据页面:
运行结果图:
安卓端http的GET请求获取到对象数组,并解析,将数据存放到实体类中:
layout.xml代码:
实体类代码;
mainfests 添加权限:
注:获取网络路径时,地址为当前网络地址。还有联网权限别忘啦!
今天继续讲安卓端解析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>
注:获取网络路径时,地址为当前网络地址。还有联网权限别忘啦!
相关文章推荐
- 安卓客户端与服务器的通信及ListView、adapter、fastjson的使用
- Android中Json数据解析(二)--使用Gson、Jackson和FastJson解析Json数据
- Json解析网络数据+listview展示跳转
- 如何使用fastJson来解析JSON格式数据和生成JSON格式数据
- 安卓数据解析之 fastjson 的解析以及Gson解析
- 78. Spring Boot完美使用FastJson解析JSON数据【从零开始学Spring Boot】
- 解析Json数据:使用FastJson进行解析json数据<三>
- 解析网络json数据并展示到ListView上
- 78. Spring Boot完美使用FastJson解析JSON数据【从零开始学Spring Boot】
- FastJSON使用心得——如何解析带中文或者数字key的数据
- JAVA-使用FastJson解析复杂JSON数据
- 使用FastJson解析Json数据
- (4)Spring Boot完美使用FastJson解析JSON数据【从零开始学Spring Boot】
- Android访问网络:服务端返回XML或JSON格式数据,Android 进行解析并使用ListView显示
- 使用FastJson解析Json数据
- android结合异步任务,动态加载图片,Json解析数据展示在ListView,并且实现按日期分类展示,借口回调
- Andorid中使用Gson和Fast-json解析库解析JSON数据---第三方库学习笔记(二)
- java使用FastJson解析Json数据
- Gson的使用——Gson解析json数组并展示在ListView控件上
- Gson的使用——Gson解析json数组并展示在ListView控件上