先上效果图:
今天继续讲安卓端解析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>注:获取网络路径时,地址为当前网络地址。还有联网权限别忘啦!
新闻热点
疑难解答