android客户端+JAVA WEB服务器实现json数据解析
public class News {private Integer id;private String title;private Integer timelength;public News(Integer id, String title, Integer timelength) {this.id = id;this.title = title;this.timelength = timelength;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public Integer getTimelength() {return timelength;}public void setTimelength(Integer timelength) {this.timelength = timelength;}
}
(2)NewsServer接口
public interface NewsServer {/** 获取最新的新闻News*/public java.util.List<News> getLastNews();}
(3)NewsServerBean类
import java.util.ArrayList;
import java.util.List;public class NewsServerBean implements NewsServer {@Overridepublic List<News> getLastNews() {// TODO Auto-generated method stubList<News> news = new ArrayList<>();news.add(new News(10, "吕文健", 20));news.add(new News(45, "李昱喜", 10));news.add(new News(89, "android is amazing", 50));return news;}}
(4)NewsListServlet类
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;@WebServlet(name="newslist",urlPatterns={"/newslist"})//配置Servlet
public class NewsListServlet extends HttpServlet {/*** */private static final long serialVersionUID = 1L;NewsServerBean serverbean =new NewsServerBean();@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// TODO Auto-generated method stubdoPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// TODO Auto-generated method stubreq.setCharacterEncoding("GBK");
resp.setCharacterEncoding("GBK");//这里设置成gbk防止手机端显示乱码,之前设置为utf-8总是乱码List<News> news = serverbean.getLastNews();
StringBuilder json = new StringBuilder();json.append("[");for(News news2:news){json.append('{').append("\"id\":").append(news2.getId()).append(","); json.append("\"title\":").append("\""+news2.getTitle()+"\"").append(",");json.append("\"timelength\":").append(news2.getTimelength());json.append('}').append(",");}json.deleteCharAt(json.length()-1);//?json.append("]");req.setAttribute("json", json.toString());req.getRequestDispatcher("/jsonnewslist.jsp").forward(req, resp);}
}
(5)jsonnewslist.jsp(在服务端测试服务器是否布置成功)
<%@ page language="java" contentType="text/plain; charset=GBK"pageEncoding="GBK"%>${json}
(6)服务器运行结果
OK,运行成功,服务器解决了,楼主把它打包成war,放在阿里云服务器上,省去了用电脑做服务器的各种麻烦。接下来进入正题,客户端解析Json
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="wf.com.getnewsinjson.MainActivity"> <Button android:id="@+id/btn_refresh" android:layout_width="match_parent" android:layout_height="50dp" android:text="刷新" /> <ListView android:id="@+id/listview" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>
(2)item.xml(ListView中每一个item的布局)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:id="@+id/title" android:layout_width="0dp" android:layout_height="50dp" android:layout_weight="1" android:gravity="center" /> <TextView android:layout_marginLeft="10dp" android:id="@+id/timelength" android:layout_width="0dp" android:layout_weight="1" android:layout_height="50dp" android:gravity="center" /> </LinearLayout>
2、主要代码
import android.util.Log; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.List; import Util.StreamTool; /** * Created by wangfeng on 2016/12/8. */ public class NewsService {public static List<News> getJsonLastNews() {List<News> list = null; InputStream in = null; String path = "http://*****";//这里输入自己的服务器地址 try {list = new ArrayList<>(); URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(5000); conn.setRequestMethod("GET"); if (conn.getResponseCode()==200){in = conn.getInputStream(); list = parseJSON(in); }} catch (MalformedURLException e) {e.printStackTrace(); System.out.println("客户端未连接到服务器"); } catch (IOException e) {e.printStackTrace(); System.out.println("客户端未连接到服务器"); }return list; }
/*
*解析json字符串并返回一个List
*/
public static List<News> parseJSON(InputStream in){List<News> list = null; try {list = new ArrayList<>(); // String str = StreamTool.streamToString(in); // System.out.println(str); byte[] bytes = StreamTool.stream2Byte(in);//这里用到了StreamTool工具类,自己到CSDN上下载一个,这里是把 //输入流转化为字节数组
String str = new String (bytes,"GBK");//因为服务器设置了返回编码为GBK,这里也设置编码方式为GBK System.out.println("解析成功"+str); JSONArray jsonArray = new JSONArray(str);//将json字符串转化为JSONArray for(int i =0;i< jsonArray.length();i++){JSONObject jsonObject = jsonArray.getJSONObject(i);//循环JSONArray获得每一个JSONObject对象 int id = jsonObject.getInt("id"); String title = jsonObject.getString("title"); int timelength = jsonObject.getInt("timelength"); list.add(new News(id,title,timelength)); }} catch (IOException e) {e.printStackTrace(); Log.e("io","输入流读取错误"); } catch (JSONException e) {e.printStackTrace(); Log.e("json","json数组转换错误"); } catch (Exception e) {e.printStackTrace(); }return list; } }
import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.ListView; import android.widget.SimpleAdapter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; public class MainActivity extends AppCompatActivity implements Runnable {List<HashMap<String,Object>> data; private static final int TAG =0X1;//用于Handler中的异步处理标志 Thread thread = null;//声明线程,用于执行NewsServer中的网络访问 Handler handler = new Handler() {@Override public void handleMessage(Message msg) {super.handleMessage(msg); switch (msg.what){case TAG:SimpleAdapter simpleAdapter = new SimpleAdapter(MainActivity.this,data,R.layout.item,new String[]{"title","timelength"},new int[]{R.id.title,R.id.timelength}); listview.setAdapter(simpleAdapter); break; }}}; @BindView(R.id.btn_refresh)Button btnRefresh; @BindView(R.id.listview)ListView listview; @Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this);//这里使用了ButterKnife组件来初始化组件和绑定id,不懂得自行百度 }@OnClick(R.id.btn_refresh)public void onClick(View view) {switch (view.getId()) {case R.id.btn_refresh:thread = new Thread(this); thread.start(); break; }}@Override public void run() {String length = getResources().getString(R.string.timelength); List<News> news = NewsService.getJsonLastNews();//这里必须另起一个线程访问,不能在主线程中访问 data = new ArrayList<>(); for(News news1:news){HashMap<String,Object> item = new HashMap<>(); item.put("id",news1.getId()); item.put("title",news1.getTitile()); item.put("timelength",length+": "+news1.getTimelength()); data.add(item); }Message msg = new Message(); msg.what=TAG; handler.sendMessage(msg);//通知组件更新界面 } }
android客户端+JAVA WEB服务器实现json数据解析相关推荐
- Java调用接口获取json数据解析后保存到数据库
文章目录 1.在yml文件中配置自己定义的接口URL 2.在Controller中添加请求方法和路径 3.在Service中添加方法 4.在ServiceImpl中实现方法 今天给大家带来一个调用接口 ...
- 利用Http在Android客户端与Web服务器之间断点续传中大文件
一.还是先说一下需要用到的工具: 1.服务端:IDEA(真的超好用).Tomcat 2.客户端:Android 二.上代码 服务端代码: import net.sf.json.JSONArray; i ...
- javaweb中服务器响应,Java Web服务器响应与JSON
我想创建一个简单的Java Web应用程序响应GET请求/用JSON字符串测试.Java Web服务器响应与JSON 我的环境是Java,Intellij和Tomcat 8.5.4. 到目前为止,我有 ...
- Android JSON数据解析(GSON方式)
要创建和解析JSON数据,也可以使用GSON来完成.GSON是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库.使用GSON,可以很容易的将一串JSON数据转换为一个Jav ...
- java中怎么使用json数据_JAVA中使用JSON进行数据传递
1.是不是只有xml传递数据的技术才是webservice? 可以这么理解.webservice是基于SOAP协议,SOAP协议是基于XML的文本协议.所以webservice可以简单理解为是基于XM ...
- Android学习笔记44:JSON数据解析
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种理想的数据交换格式. 本文将主要介绍在Android ...
- 客户端Mock服务端的JSON数据
http://hlyu.cn/?p=392 http://hlyu.cn/?p=392 http://hlyu.cn/?p=392 客户端Mock服务端的JSON数据 场景1:服务端和客户端已经制定了 ...
- java数组里套数组_用JAVA进行Json数据解析(对象数组的相互嵌套)
这段时间我们在做一个英语翻译软件的小小小APP,涉及到了对Json数据的解析,所以特地来总结一下! 假设我们要对如下数据进行解析,其实在平时,返回的Json数据是很乱的,很难分清数据的关系,这是经过相 ...
- AndServer,一个Android端的web服务器
版权声明:转载必须注明本文转自严振杰的博客:http://blog.yanzhenjie.com 大家好,今天跟大家介绍一个让原生Android也可以做Web开发的开源项目--AndServer. 开 ...
最新文章
- php json_encode中提示的中文总是返回\u767b\u5f55\u6210\u529f\uff01的解决办法
- pycharm如何折叠指定代码而不是某一个函数或类或功能块
- 创业公司产品经理如何画好原型图
- RocketMQ消息支持的模式-消息同步发送
- css图片等比例裁剪
- WCF学习之旅—第三个示例之四(三十)
- spark学习-62-Spark:Yarn-cluster和Yarn-client区别与联系
- JAVA遍历map元素
- 中国双重增亮膜(DBEF)市场趋势报告、技术动态创新及市场预测
- 微信小程序下载pdf到本地的坑
- 翻译润色、论文英语修改、语法建议、3个软件-研究生必用
- day02 python基础
- 滴滴天使投资人的25条创业建议
- Rhino6.25软件安装教程|兼容WIN10
- 1894 Beckham’s Freekick
- 对标阿里P7Android最全面试题合集(GitHub、掘金高赞收集)
- (四)国产数据库-达梦DCA实操(创建用户、权限)
- TC397 LIN Master 用例
- 前置自增加++与后置自增加++区别,前后自减同理
- 阿里校园招聘前端面试