Android基础_web通信2
一.移动客服端实现对PC端数据的操作
在PC端模拟一个数据库,实现用户的增删改查,然后在移动客服端实现对PC端数据库的操作
在PC端建立三个表
用户表(Users),员工表(Emp), 部门表(Dept),
User表对应字段,并设置对应的set/get方法,这里不一一写出
private int uno;
private String uname;
private String upwd;
Emp表对应字段
private int eno;
private String ename;
private int eage;
private String esex;
private Date eintime;
Dept表对应字段
private int dno;
private String dname;
对数据库的模拟操作:
pc端代码:
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
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; import com.entity.Users;
import com.google.gson.Gson; /**
* 处理Users相关请求的控制类
*/
@WebServlet("/UserServlet")
public class UserServlet extends HttpServlet {
private static final long serialVersionUID = 1L; //定义一个集合,初始化一些用户
private List<Users> userList; public UserServlet() {
super();
userList=new ArrayList<Users>();
userList.add(new Users(1, "admins", "admins"));
userList.add(new Users(2, "jack", "000000"));
userList.add(new Users(3, "lucy", "000000"));
userList.add(new Users(4, "toms", "000000"));
userList.add(new Users(5, "join", "000000"));
} //所有来到UserServlet的请求都将进入service中进行分发
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
//获取用户要请求的方法
String method=request.getParameter("method");
switch(method){
case "login":
doLogin(request, response);
break;
case "register":
doRegister(request, response);
break;
case "userList":
doFindUserList(request, response);
break;
case "userById":
doFindUserById(request, response);
break;
case "updateUser":
doUpdateUser(request, response);
break;
case "deleteUser":
doDeleteUser(request, response);
break;
}
} //用户登录
protected void doLogin(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//接收用户传递的参数
String name=request.getParameter("uname");
String pwd=request.getParameter("upwd"); PrintWriter out=response.getWriter();
for (Users users : userList) {
if(users.getUname().equals(name)&&users.getUpwd().equals(pwd)){
out.println("用户登录成功");
return;
}
}
out.print("用户名和密码错误");
out.close();
} //添加用户
protected void doRegister(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("----------进入添加用户操作----------");
//接收用户传递的参数
String name=request.getParameter("uname");
String pwd=request.getParameter("upwd"); //将信息封装成一个Users对象
userList.add(new Users(userList.size()+1, name, pwd));
PrintWriter out=response.getWriter();
out.println("用户"+name+"添加成功");
out.close();
} //查询所有用户
protected void doFindUserList(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out=response.getWriter();
//将所有用户以JSON格式响应到客户端
out.println(new Gson().toJson(userList));
out.close();
} //根据Id查询单个用户
protected void doFindUserById(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out=response.getWriter();
//取出ID
int id=Integer.parseInt(request.getParameter("uno"));
for (Users users : userList) {
if(users.getUno()==id){
out.println(new Gson().toJson(users));
return;
}
}
out.close();
} //修改用户
protected void doUpdateUser(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int id=Integer.parseInt(request.getParameter("uno"));
String name=request.getParameter("uname");
String pwd=request.getParameter("upwd"); PrintWriter out=response.getWriter();
for (Users users : userList) {
if(users.getUno()==id){
users.setUname(name);
users.setUpwd(pwd);
out.println(new Gson().toJson("修改用户成功"));
return;
}
}
out.println(new Gson().toJson("修改用户失败"));
out.close();
} //删除用户
protected void doDeleteUser(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int id=Integer.parseInt(request.getParameter("uno"));
PrintWriter out=response.getWriter();
for (Users users : userList) {
if(users.getUno()==id){
userList.remove(users);
out.println(new Gson().toJson("删除用户成功"));
return;
}
}
out.println(new Gson().toJson("删除用户失败"));
out.close();
} }
HTML页面 :
用户登录代码:<a href="http://localhost:8080/Web_Project/UserServlet?method=login&uname=xiaolin&upwd=000000">用户登录</a><br/><br/>,传参其他的相同
PC端对数据的操作完成。
手机客服端代码:
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast; import com.example.utils.CallBack;
import com.example.utils.FileUtils;
import com.example.utils.HttpUtils; import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject; import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
} //用户登录(自带模拟器:10.0.2.2,Genymotion:本地IP)
public void doLogin(View view){
new Thread(new Runnable() {
@Override
public void run() {
try {
//192.168.3.183需要改成你的本地IP地址,下面的都需要改成你本地的IP地址
URL url=new URL("http://192.168.3.183:8080/Web_Project/UserServlet?method=login&uname=xiaolin&upwd=000000");
HttpURLConnection conn=(HttpURLConnection) url.openConnection();
conn.connect();
//获取结果
InputStream input=conn.getInputStream();
final String result= FileUtils.formatStreamToString(input);
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(), result, Toast.LENGTH_SHORT).show();
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
} //添加用户
public void doRegister(View view){
new Thread(new Runnable() {
@Override
public void run() {
try {
URL url=new URL("http://192.168.3.183:8080/Web_Project/UserServlet");
HttpURLConnection conn=(HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");//以POST方式传值
conn.setDoOutput(true);//允许向服务器传递参数,默认false
conn.connect();
//向服务器传递数据java.net.URLEncoder.encode("","utf-8");
String data="method=register&uname=xiaolin&upwd=123456";
OutputStream out=conn.getOutputStream();
out.write(data.getBytes());
out.close(); //获取结果
InputStream input=conn.getInputStream();
final String result= FileUtils.formatStreamToString(input);
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(), result, Toast.LENGTH_SHORT).show();
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
} //查询所有用户
public void doFindUserList(View view){
new Thread(new Runnable() {
@Override
public void run() {
try {
URL url=new URL("http://192.168.3.183:8080/Web_Project/UserServlet?method=userList");
HttpURLConnection conn=(HttpURLConnection)url.openConnection();
conn.connect(); //直接将返回的流转换为一个字符串
String result=FileUtils.formatStreamToString(conn.getInputStream());
//如何解析一个JSON字符串
final JSONArray array=new JSONArray(result);
runOnUiThread(new Runnable() {
@Override
public void run() {
for(int i=0;i<array.length();i++){
try {
JSONObject obj=array.getJSONObject(i);
String msg="用户名:"+obj.getString("uname")+",密码:"+obj.getString("upwd");
Toast.makeText(getApplicationContext(),msg, Toast.LENGTH_SHORT).show();
} catch (JSONException e) {
e.printStackTrace();
} }
}
}); } catch (Exception e) {
e.printStackTrace();
}
}
}).start();
} //查询单个用户
public void doFindUserById(View view){
new Thread(new Runnable() {
@Override
public void run() {
try {
URL url=new URL("http://192.168.3.183:8080/Web_Project/UserServlet?method=userById&uno=1");
HttpURLConnection conn=(HttpURLConnection)url.openConnection();
conn.connect(); //直接将返回的流转换为一个字符串
String result=FileUtils.formatStreamToString(conn.getInputStream());
//如何解析一个JSON字符串
final JSONObject obj=new JSONObject(result);
runOnUiThread(new Runnable() {
@Override
public void run() {
String msg= null;
try {
msg = "用户名:"+obj.getString("uname")+",密码:"+obj.getString("upwd");
Toast.makeText(getApplicationContext(),msg, Toast.LENGTH_SHORT).show();
} catch (JSONException e) {
e.printStackTrace();
} }
}); } catch (Exception e) {
e.printStackTrace();
}
}
}).start();
} //更新用户
public void doUpdateUser(View view){
new Thread(new Runnable() {
@Override
public void run() {
try {
URL url=new URL("http://192.168.3.183:8080/Web_Project/UserServlet");
HttpURLConnection conn=(HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");//以POST方式传值
conn.setDoOutput(true);//允许向服务器传递参数,默认false
conn.connect();
//向服务器传递数据java.net.URLEncoder.encode("","utf-8");
String data="method=updateUser&uno=6&uname=xiaolin&upwd=111111";
OutputStream out=conn.getOutputStream();
out.write(data.getBytes());
out.close(); //获取结果
InputStream input=conn.getInputStream();
final String result= FileUtils.formatStreamToString(input);
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(),result.toString(), Toast.LENGTH_SHORT).show();
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
} //删除用户
public void doDeleteUser(View view){
try {
URL url=new URL("http://192.168.3.183:8080/Web_Project/UserServlet");
String data="method=deleteUser&uno=6";
HttpUtils.doPost(url, data, new CallBack() {
@Override
public void success(final String str) {
runOnUI(str);
}
@Override
public void failed(final String str) {
runOnUI(str);
}
});
} catch (MalformedURLException e) {
e.printStackTrace();
}
} public void addEmp(View view){
try {
URL url=new URL("http://192.168.3.183:8080/Web_Project/EmpServlet");
String data="method=addEmp&ename=小明&eage=21&esex=男&eintime=2017-7-8&dno=1";
HttpUtils.doPost(url, data, new CallBack() {
@Override
public void success(final String str) {
runOnUI(str);
}
@Override
public void failed(final String str) {
runOnUI(str);
}
});
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
public void findEmpList(View view){
try {
URL url=new URL("http://192.168.3.183:8080/Web_Project/EmpServlet?method=empList");
HttpUtils.doGet(url,null, new CallBack() {
@Override
public void success(final String str) {
try {
final JSONArray array=new JSONArray(str);
for(int i=0;i<array.length();i++){
JSONObject obj=array.getJSONObject(i);
JSONObject dept=obj.getJSONObject("dept");
String empInfo="员工姓名"+obj.getString("ename")+",部门:"+dept.getString("dname");
runOnUI(empInfo);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void failed(final String str) {
runOnUI("查询失败");
}
});
} catch (MalformedURLException e) {
e.printStackTrace();
}
} private void runOnUI(final String str){
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(),str, Toast.LENGTH_SHORT).show();
}
});
} }
工具类:
FileUtils
public class FileUtils { //将一个输入流转换为一个字符串
public static String formatStreamToString(InputStream stream){
if(stream!=null){
ByteArrayOutputStream out=new ByteArrayOutputStream();
byte[] bytes=new byte[1024];
int len=0;
try {
while((len=stream.read(bytes))!=-1){
out.write(bytes,0,len);
}
String str=out.toString();
out.flush();
out.close();
stream.close();
return str;
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
} //执行下载文件到指定位置
public static void downLoadFile(final String fromPath, final String savePath, final CallBack callBack){
if(fromPath!=null&&savePath!=null){
new Thread(new Runnable() {
@Override
public void run() {
try {
URL url=new URL(fromPath);
HttpURLConnection conn=(HttpURLConnection) url.openConnection();
conn.setConnectTimeout(20*1000);
conn.connect();
InputStream input=conn.getInputStream();
File file=new File(savePath);
if(!file.getParentFile().exists())
file.getParentFile().mkdirs();
OutputStream out=new FileOutputStream(file);
byte[] bytes=new byte[1024];
for(int len=0;(len=input.read(bytes))!=-1;){
out.write(bytes,0,len);
}
out.flush();
out.close();
input.close();
callBack.success(null);//下载成功
} catch (Exception e) {
e.printStackTrace();
callBack.failed(null);//下载失败
}
}
}).start();
}
} public static boolean existsFile(String path){
if(path!=null&&path.length()>0) {
File file = new File(path);
if(file.exists())
return true;
}
return false;
}
}
HttpUtils
public class HttpUtils { public static void doPost(final URL url, final String data, final CallBack callBack){
new Thread(new Runnable() {
@Override
public void run() {
try {
HttpURLConnection conn=(HttpURLConnection)url.openConnection();
conn.setRequestMethod("POST");
conn.setConnectTimeout(10*1000);
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setInstanceFollowRedirects(true);
conn.connect();
if(data!=null&&data.length()>0){
OutputStream out=conn.getOutputStream();
out.write(data.getBytes());
out.close();
}
callBack.success(FileUtils.formatStreamToString(conn.getInputStream()));
} catch (IOException e) {
e.printStackTrace();
callBack.failed("操作出错");
} }
}).start();
} public static void doGet(final URL url,final String data,final CallBack callBack){
new Thread(new Runnable() {
@Override
public void run() {
try {
HttpURLConnection conn=(HttpURLConnection)url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(10*1000);
conn.setDoOutput(true);
conn.setInstanceFollowRedirects(true);
conn.connect();
if(data!=null&&data.length()>0){
OutputStream out=conn.getOutputStream();
out.write(data.getBytes());
out.close();
}
callBack.success(FileUtils.formatStreamToString(conn.getInputStream()));
} catch (IOException e) {
e.printStackTrace();
callBack.failed("操作出错");
} }
}).start();
}
}
CallBack
public interface CallBack { public void success(String str);
public void failed(String str);
}
界面:
手机客服端代码完成。
Android基础_web通信2的更多相关文章
- Android基础_web通信3
在Android基础_web通信2中,我运用的JSONObject是Android原生的json类,通过import org.json.JSONObject来导入. 还有另外一种更简单的方法,就是用G ...
- Android基础_web通信
一.发展史 1G 模拟制式手机,只能进行语音通话2G 数字制式手机,增加接收数据等功能3G 智能手机,它已经成了集语音通信和多媒体通信相结合,并且包括图像.音乐.网页浏览.电话会议以及其它一些信息服务 ...
- Andorid基础_web通信_webView案例
一.创建Activity,layout文件 activity_web_view.xml代码: <?xml version="1.0" encoding="utf-8 ...
- Android基础总结(8)——服务
服务(Service)是Android中实现程序后台运行的解决方案,它非常适合用于去执行哪些不需要和用户交互而且还要长期运行的任务.服务的运行不依赖任何用户界面,即使当程序被切换到后台,或者用户打开了 ...
- 【Xamarin开发 Android 系列 4】 Android 基础知识
原文:[Xamarin开发 Android 系列 4] Android 基础知识 什么是Android? Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Li ...
- 【朝花夕拾】Android性能篇之(七)Android跨进程通信篇
前言 只要是面试高级工程师岗位,Android跨进程通信就是最受面试官青睐的知识点之一.Android系统的运行由大量相互独立的进程相互协助来完成的,所以Android进程间通信问题,是做好Andro ...
- android基础---->service的生命周期
服务是一个应用程序组件代表应用程序执行一个长时间操作的行为,虽然不与用户交互或供应功能供其它应用程序使用.它和其他的应用对象一样,在他的宿主进程的主线程中运行.今天我们开始android中普通serv ...
- Android基础——Fragment控制切换多个页面
今天接着上一篇文章,讲解一下Fragment的控制,主要是切换View和页面替换等操作.还有就是如何获取Fragment的管理对象,以及与Activity的通信方式. (PS:新建的QQ群,有兴趣可以 ...
- Android基础新手教程——4.1.3 Activity登堂入室
Android基础新手教程--4.1.3 Activity登堂入室 标签(空格分隔): Android基础新手教程 本节引言: 好的,在学习了两节的Activity后相信大家已经知道怎样去使用Acti ...
随机推荐
- git忽略文件
.gitignore文件配置 ###################### # Project Specific ###################### /src/main/webapp/dis ...
- Sagit.Framework For IOS 开发框架入门教程4:注册页布局-被消灭的变量
前言: 上篇写完:Sagit.Framework For IOS 开发框架入门教程3:Start引导页-框架布局和隐藏事件的内幕 之后,好久没写文章了,有IT连创业系列.有DotNetCore的一篇文 ...
- Android Spinner值不显示,选择列表正常
你在给adapter设置数据时,如果你是静态数据,也就是死数据,那么spinner显示没有问题,但是你如果异步进行网络请求,或者使用Volley请求的时候就要注意,你的adapter设置要在onRes ...
- iOS学习之Socket使用简明教程- AsyncSocket
转载自:http://my.oschina.net/joanfen/blog/287238 如果需要在项目中像QQ微信一样做到即时通讯,必须使用socket通讯,本人也是刚学习,分享一下,有什么不对的 ...
- Java多线程之赛跑游戏
在JavaSE中,多线程是一个重要的内容. 我们要了解多线程的概念,就要先了解进程的概念:要了解进程的概念,就离不开操作系统的概念. 在一台正常运行的电脑中,计算机硬件(如CPU.内存.硬盘.网卡.显 ...
- Xamarin android CardView的使用详解
android 5.0新增加的一个控件CardView,在support v7兼容包中,意思就是卡片View,虽然可以设置阴影,圆角等等样式,但是我们也可以自己写出来,谷歌工程师之所以出这个,肯定是帮 ...
- window下mysql数据备份
今天我有个朋友让我帮他在windowServer服务器上备份一下mysql的数据库,于是花了一天的时间完成了一个每天定时备份数据库的功能,小编在这里为大家记录一下: 首先对于mysql命令行的导入导出 ...
- template package (godoc 翻译)
template 包 概述(Overview) template 包实现了数据驱动模板用于生成文本输出. 要生成HTML输出,请参阅html/template包,它具有与此包相同的接口,但会自动保护H ...
- Nodejs密集型CPU解决方案
首先说一下nodejs单线程的优势: 高性能,与php相比,避免了频繁创建切换线程的开销,执行更加迅速,资源占用小. 线程安全,不用担心同一变量被多线程读写,造成程序崩溃. 单线程的异步和非阻塞,其实 ...
- [编织消息框架][JAVA核心技术]动态代理应用7-IRpcSend实现
根据设计生成两个接口,IRpcSend send方法返回数据要求包装成QResult对象 public interface IRpcSend { public <T> QResult< ...