Android与JSP javaweb交互参考文章
Android之使用JavaWeb项目作为后台的实现
android客户端+JAVA WEB服务器实现json数据解析
- <span style="font-size:18px;"> 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;
- }
- }</span>
(2)NewsServer接口
- <span style="font-size:18px;">public interface NewsServer {
- /*
- * 获取最新的新闻News
- */
- public java.util.List<News> getLastNews();
- }</span>
(3)NewsServerBean类
- <span style="font-size:18px;">import java.util.ArrayList;
- import java.util.List;
- public class NewsServerBean implements NewsServer {
- @Override
- public List<News> getLastNews() {
- // TODO Auto-generated method stub
- List<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;
- }
- }</span>
(4)NewsListServlet类
- <span style="font-size:18px;">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();
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- // TODO Auto-generated method stub
- doPost(req, resp);
- }
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- // TODO Auto-generated method stub
- req.setCharacterEncoding("GBK");</span>
- <span style="font-size:18px;"> resp.setCharacterEncoding("GBK");//这里设置成gbk防止手机端显示乱码,之前设置为utf-8总是乱码
- List<News> news = serverbean.getLastNews();</span>
- <span style="font-size:18px;"> 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);
- }
- }</span>
(5)jsonnewslist.jsp(在服务端测试服务器是否布置成功)
- <span style="font-size:18px;"><%@ page language="java" contentType="text/plain; charset=GBK"
- pageEncoding="GBK"%>
- ${json}</span>
(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);//通知组件更新界面 } }
- 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;
- }
- }</span>
(2)NewsServer接口
- <span style="font-size:18px;">public interface NewsServer {
- /*
- * 获取最新的新闻News
- */
- public java.util.List<News> getLastNews();
- }</span>
(3)NewsServerBean类
- <span style="font-size:18px;">import java.util.ArrayList;
- import java.util.List;
- public class NewsServerBean implements NewsServer {
- @Override
- public List<News> getLastNews() {
- // TODO Auto-generated method stub
- List<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;
- }
- }</span>
(4)NewsListServlet类
- <span style="font-size:18px;">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();
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- // TODO Auto-generated method stub
- doPost(req, resp);
- }
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- // TODO Auto-generated method stub
- req.setCharacterEncoding("GBK");</span>
- <span style="font-size:18px;"> resp.setCharacterEncoding("GBK");//这里设置成gbk防止手机端显示乱码,之前设置为utf-8总是乱码
- List<News> news = serverbean.getLastNews();</span>
- <span style="font-size:18px;"> 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);
- }
- }</span>
(5)jsonnewslist.jsp(在服务端测试服务器是否布置成功)
- <span style="font-size:18px;"><%@ page language="java" contentType="text/plain; charset=GBK"
- pageEncoding="GBK"%>
- ${json}</span>
(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与JSP javaweb交互参考文章相关推荐
- Android Studio 与 Tomcat 交互案例(新)
首先默认已经装了Tomcat了,这方面的教程网上一大堆. github地址 文章目录 两数求和 账户登录与注册 两数求和 参考android与tomcat数据交互所写 移动端输入两个数,点击按钮,在w ...
- Android混合开发-(Android与Web的交互)
在Android开发中,越来越多的商业项目使用了Android原生控件与WebView进行混合开发,当然不仅仅就是显示一个WebView那么简单,有时候还需要本地Java代码与HTML中的JavaSc ...
- 客户端相关知识学习(三)之Android原生与H5交互的实现
Android原生与H5交互的实现 H5调用原生的方式 方式可能有多种,根据开发经验,接触过两种方式. 方法一:Android向H5注入全局js对象,也就是H5调Android 1.首先对WebVie ...
- 安卓Android与H5双向交互MathJax展示数学公式(源码+解析)
安卓Android与H5双向交互MathJax展示数学公式(源码+解析) 博主就今天周五又做了个需求(安卓Android与H5交互),原来上线的功能是服务器配置过来的学习报告(一个H5页面)并提供原始 ...
- Android热修复技术选型参考
背景 热修复就是通过下发补丁包,让已安装的客户端动态更新,用户不用重新安装APP,就能够修复软件缺陷. 热修复技术对比 1.公司角度 大致可以分为阿里系和腾讯系和其他,如下: 阿里系 Dexposed ...
- HTML和JSP的交互
HTML和JSP的交互 1.任务简介 本博客分享的是工程训练任务中"中间件和WEB服务"里面的内容,主要涉及HTML和JSP的知识,我通过两个普通任务和一个挑战任务将所学成果分享给 ...
- Java JSP JAVAweb在线考试系统源码网上考试系统源码(ssm考试管理系统)
Java JSP JAVAweb在线考试系统源码网上考试系统源码(ssm考试管理系统) 常见的Javaweb题材有 理财系统,就业管理系统,汽车租赁,简易网盘,疫情数据查看,在线招标房,屋租赁,教务管 ...
- 如何避免贫穷和忙碌,在2018年你需要这样提升自己 2018年01月07日 00:00:00 2099 热文导读 | 点击标题阅读 Java和Android架构2017年总结:文章精选 吊炸天!74
如何避免贫穷和忙碌,在2018年你需要这样提升自己 2018年01月07日 00:00:00 2099 热文导读 | 点击标题阅读 Java和Android架构2017年总结:文章精选 吊炸天!74款 ...
- 2.3.NLTK工具包安装、分词、Text对象、停用词、过滤掉停用词、词性标注、分块、命名实体识别、数据清洗实例、参考文章
2.3.NLTK工具包安装 2.3.1.分词 2.3.2.Text对象 2.3.3.停用词 2.3.4.过滤掉停用词 2.3.5.词性标注 2.3.6.分块 2.3.7.命名实体识别 2.3.8.数据 ...
最新文章
- DevOps:软件架构师行动指南3.1 概述
- xend: No such file or directory. Is xend running? 问题
- python爬虫开发环境_python爬虫开发教程下载|Python爬虫开发与项目实战(范传辉 著)pdf 完整版_ - 极光下载站...
- 2、Get和post的区别
- Solr集群搭建,zookeeper集群搭建,Solr分片管理,Solr集群下的DataImport,分词配置。...
- Backup--修改实例级别是否使用压缩备份的默认值
- Can 总线 收发原理
- 绘制Python代码的UML图
- 微信小程序多位验证码/密码输入框
- 大连市2011年初中毕业升学考试试测(一)数 学
- 医学统计学基础——第一讲
- spfa slf优化
- 服务器虚拟化基础hcna,华为云计算全新大纲课程 乾颐堂HCNA-Cloud服务器虚拟化云计算实战课程 HCNA认证课程...
- 基于MFC的人事管理系统 VC++
- 巧用万能驱动包安装驱动
- Halcon threshold详解
- Windows蓝屏死机骗局:新的恶意钓鱼方式
- 三菱PLC特殊软元件
- 【UE4】给游戏制作一个简易的小地图
- java jnlp被阻止_JNLP 被java安全阻止
热门文章
- 计算机视觉CV的入门理解
- lan和adsl是什么信号_lan和adsl是什么信号_ADSL宽带和LAN宽带接入对比(组图)
- 后悔没早点看这篇直播系统定制开发入门篇
- AP8022开关电源小家电ACDC芯片离线式开关电源IC
- Java实现——判断一个数是否是质数
- Office Visio 2016安装
- 英语藏红花StigmaCroci西红花stigmacroci番红花
- 【无标题】 中国小龙虾市场消费状况与盈利前景预测报告(新版)2022-2027年
- 凌轩:公司面孔、公司精神让公司万古长存
- STM32F103C8T6电池电量ADC检测代码,适用于基于库函数的STM32微控制器