Android客户端是如何与服务端的数据进行交互的呢?
一般就是客户端向服务端发送请求,服务端对数据进行相关处理,返回json数据返回给客户端,客户端再进行相关操作。
说明:主要是用登录功能来进行详解
一、服务端
1、新建maven项目,新建完项目之后,会报错,需要要改一些修改相关配置文件,过程就不详解了。
2、建立相关的包,通过mybatis-generator-gui工具生成po,dao,mapping文件
3、在dao(mapper),service,service实现类中写相关的方法,mapping中写相关的SQL语句。
Controller层写登录的方法,主要是通过账号和密码进行登录,判断客户端传过来的数据不为空,根据账号查询账户信息,将查询出来的对象保存到session中,登录成功后利用Gson返回json数据,如下:

@Controller
@RequestMapping("/app/manager")
public class AppManagerController {
private final String SESSION_MANAGER = "sessionManager";private Gson gson=new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();//注入service层@AutowiredIShopManagerService shopManagerService;/*** 密码登录* @param phone      手机号* @param password  密码* @return*/@ResponseBody@RequestMapping(value="/loginByPassword",produces = "application/json;charset=UTF-8")public Object loginByPassword(String phone,String password) {JsonReturn jsonReturn=new JsonReturn();if(Tools.isNotNull(phone) && Tools.isNotNull(password)) {ShopManagerVomanagerVo=this.shopManagerService.findManagerVoByPhone(phone);if(managerVo!=null) {HttpSession session=request.getSession();if(password.equals(managerVo.getPassword().trim())) {//登录成功//将managerVo放入sessionsession.setAttribute(SESSION_MANAGER, managerVo);jsonReturn.setCode(200);jsonReturn.setText("登录成功");jsonReturn.setData(managerVo);}else {jsonReturn.setCode(502);jsonReturn.setText("密码不正确");}}else {jsonReturn.setCode(501);jsonReturn.setText("该手机号未注册");}}else {jsonReturn.setCode(500);jsonReturn.setText("参数异常");}return gson.toJson(jsonReturn);}
}

二、Android客户端
1、新建Android项目,搭建登录界面。
2、创建Activity类,设置布局,获取界面相关控件,然后初始化页面,初始化页面中对相 关参数进行设置,获取服务端的url,获取账户头像;主要是通过ServiceUrls这个工具类 来获取服务端的方法,在这里要注意的是用实体机调试时,serviceUrl需要改为我们所 连接的WiFi网络的IP地址,加上端口号和服务端项目的名称。

private static String serviceUrl="http://192.168.43.47:8080/PharmacyService/";

 private static String urlPostfix=".do";//获取 AppManagerController 方法的路径public static String getManagerMethodUrl(String method){return serviceUrl+"app/manager/"+method+urlPostfix;}

初始化页面代码:主要是判断账户是否登录,通过MyApplication来进行获取登录信息,如果没有登录,则加载默认的头像。

//初始化页面
private void initView() {manager=myApplication.getLoginManager();//加载用户信息String photoUrl="";boolean sex=true;//true 男性;false 女性if(myApplication.isLogin()){//加载性别信息sex=manager.getSex();//获取头像信息String photo=manager.getPhoto();photoUrl=ServiceUrls.getManagerMethodUrl("getManagerPicture")+"?pictureName="+photo;}//使用Glide加载头像信息//设置头像加载失败时的默认头像int icErrorResourceId=sex?R.drawable.ic_default_man:R.drawable.ic_default_woman;Glide.with(this).load(photoUrl).apply(headerRO.error(icErrorResourceId)).into(ivHeaderImage);}

MyAppliction代码:

3、设置事件监听事件,登录按钮设置点击事件,获取账号和密码,验证数据,获取服务端 的URL方法,通过Map键值对的方式赋值,然后通过OKHttpTool工具类发送请求到服务端, 创建回调 方法,以线程的方式再返回到客户端,获取返回的状态码是否登录成功,如果成 功则将账户信息保存到Application中,否则弹出错误信息。

//设置控件事件
private void setViewEventListener() {
btnSubmit.setOnClickListener(new View.OnClickListener() {//登录@Overridepublic void onClick(View v) {//获取参数Stringphone=etPhone.getText()==null?"":etPhone.getText().toString();String password=etPassword.getText()==null?"":etPassword.getText().toString();//验证数据if(!Tools.isMobile(phone)){etPhone.setError("请输入正确的手机号");return;}if(!Tools.isNotNull(password)){etPassword.setError("请输入密码");return;}//===发送请求//urlString url=ServiceUrls.getManagerMethodUrl("loginByPassword");//参数final Map<String,Object> map=new HashMap<>();map.put("phone",phone);map.put("password", MD5Util.getMD5(password));//发送请求OkHttpTool.httpPost(url, map, new OkHttpTool.ResponseCallback() {@Overridepublic void onResponse(final boolean isSuccess, final int responseCode, final String response, Exception exception) {mActivityContext.runOnUiThread(new Runnable() {@Overridepublic void run() {String strText="无法连接服务器,请检查网络连接";if(isSuccess && responseCode==200){try {JSONObject jsonObject=new JSONObject(response);int code=jsonObject.getInt("code");strText=jsonObject.getString("text");if(code==200){String strData=jsonObject.getString("data");ManagerBean managerBean=gson.fromJson(strData,ManagerBean.class);if(managerBean!=null){//将用户信息保存到Application(内存)myApplication.setLoginManager(managerBean);//保存登录的手机号和密码//!!!实际项目中编码这样做,安全性不高SPUtils.put(mActivityContext,ServiceUrls.SP_MANAGER_PHONE,managerBean.getPhone().trim());SPUtils.put(mActivityContext,ServiceUrls.SP_MANAGER_PASSWORD,managerBean.getPassword().trim());initView();}else {strText="登录失败";}}} catch (JSONException e) {e.printStackTrace();}}Toast.makeText(mActivityContext,strText,Toast.LENGTH_LONG).show();}});});
});

OKHttpTool代码:


注意:必须在AndroidManifest.xml文件中设置打开网络请求,不然是没法和服务端进行交互的。还有xml中网络的设置, 以及在build.gradle中的相关引用

<!--允许程序打开网络套接字--><uses-permission android:name="android.permission.INTERNET" />
<network-security-config><!--开发中可以考虑使用--><!--Android API 28 关闭HTTPS服务器监测--><base-config cleartextTrafficPermitted="true" />
</network-security-config>
//gson
implementation 'com.google.code.gson:gson:2.8.6'
//网络请求
implementation 'com.squareup.okhttp3:okhttp:4.4.0'
implementation 'com.squareup.okhttp3:logging-interceptor:4.4.0'
//glide图片加载框架
implementation 'com.github.bumptech.glide:glide:4.11.0'
//glide 图片转换框架
implementation 'jp.wasabeef:glide-transformations:3.3.0'
//图像裁剪 (https://github.com/Yalantis/uCrop) 需要先配置 maven { url "https://jitpack.io" }
implementation 'com.github.yalantis:ucrop:2.2.4'

效果

Android 客户端与服务端的数据交互问题相关推荐

  1. 【Android 开发】: Android客户端与服务端之间使用JSON交互数据。

    在前面的两讲中,我们讲解了JSON数据格式的一些基本知识,以及做一些小Demo,这一讲我们在前面的基础上来做一个综合的可扩展的Demo,主要是针对Android客户端解析服务端传递过来的JSON数据. ...

  2. 基于TCP/IP协议的Java服务端与Android客户端的Socket通信及数据交互

    基于TCP/IP协议的Java服务端与Android客户端的Socket通信及数据交互 一.前言 1.Java服务端程序代码的项目名为TcpSocketServerOfJava,包名为com.exam ...

  3. android客户端访问服务端,服务端返回json数据

    json这里选用了fast-json 先看服务端代码如下 package novelserver.servlet;import java.io.IOException; import java.io. ...

  4. 在线登录注册功能(android客户端+javaweb服务端+腾讯云服务器+腾讯云数据库)

    在线登录注册功能(android客户端+javaweb服务端+腾讯云服务器+腾讯云数据库) 完整的项目已上传github仓库,链接在文章最下面 注:笔者在安卓客户端部分写了kotlin语言和java语 ...

  5. Android客户端和服务端如何使用Token和Session

    对于初学者来说,对Token和Session的使用难免会限于困境,开发过程中知道有这个东西,但却不知道为什么要用他?更不知道其原理,今天我就带大家一起分析分析这东西. 一.我们先解释一下他的含义: 1 ...

  6. android客户端和服务端交互,谈谈android客户端和网站数据交互的实现

    android客户端一般不直接访问网站数据库,而是像浏览器一样发送get或者post请求,然后网站返回客户端能理解的数据格式,客户端解析这些数据,显示在界面上,常用的数据格式是xml和json. 可以 ...

  7. android客户端访问服务端tomcat

    为什么80%的码农都做不了架构师?>>>    首先,服务器端已经存在一个项目,该项目基于SSH,已经部署在tomcat上并且正在运行了.我在这个项目的action层新建了一个包,该 ...

  8. 胖葵酒店管理系统(android客户端+javaweb服务端+腾讯云服务器+腾讯云数据库)

    胖葵酒店管理系统app 完整项目已上传github,链接在文章下面 先看效果图: 登录: 主页面(点击右上角图标进入个人中心页面): 经理模块(客房管理模块和员工管理模块与经理管理模块类似,员工管理模 ...

  9. Android客户端与后台服务器的数据交互

    Android客户端与服务器的数据交互 这是今年7月份时在一家公司实训时自己做的一个小项目,仅仅是一个简单的模拟Android客户端与服务器的数据交互,中间会有串口通信,以及利用JDBC连接Mysql ...

最新文章

  1. 在列表前方插入一个数据_Python基础知识详解(三):数据结构篇
  2. Node.js 函数
  3. 判断1个整数的二进制形式的1的个数
  4. 结语|日拱一卒无有尽,功不唐捐终入海
  5. 从零开始:什么是Makefile分析
  6. 为什么php都用mysql,PHP MySQL为什么?
  7. [20170604]12c Top Frequency histogram补充.txt
  8. 随机邻域嵌入_[读综述] 图嵌入的应用
  9. 点击触发ajax重复提交表单,屡次连续点击致使Ajax重复提交
  10. 栈解决中缀表达式转后缀表达式_第3章栈和队列,中缀表达式转换成后缀表达式...
  11. 哈尔滨平面模特,哈尔滨平面模特招聘,哈尔滨平面模特兼职,哈尔滨当平面模特,哈尔滨儿童平面模特,
  12. 在合并单元格中数组公式无效_Excel|普通公式无法有效解决问题时使用数组公式...
  13. 好的商城系统都是这个样子的
  14. 数据时代大数据管理,主要有哪些策略?
  15. 超详细如何配置将WAN接入
  16. 要在textarea文本框中粘贴图片怎么办?
  17. oracle存储过程初学实例
  18. html5 canvas纯js开发战棋类rpg游戏
  19. CentOS7目录结构详细版
  20. 婚恋交友源码开发,实现图片的滑动切换

热门文章

  1. 线下门店如何运营私域流量
  2. 对待事物,乐观积极。
  3. 微信支付(扫码支付)微信公众平台开发教程(6)
  4. DSNet: A Flexible Detect-to-Summarize Network for Video Summarizationa论文笔记
  5. Raspberry Pi 3b+制作24小时热点
  6. Web 2.0概念地图-from Tim Oreilly
  7. 如何让青少年在AI时代抢占先机
  8. CCF 难题汇总(2013-2019 持续更新)
  9. 批量修改Excel中的图片大小方法
  10. 正在完成android更新三星,手机实时动态:这些都是三星手机正在获取Android 10