android获取网络连接及相关事件
在android 中,仅仅是UI设计 ,还不能满足用户的一些需求,相应的如果用户需要登陆到app,我们就要进行一些认证了。本篇主要记录的是通过网络连接到后台,从数据库中查找验证用户的合法性。
首先我们需要一些后台的支持,这里是建立在有mysql数据库,切建立了相应的用户表,同时实现了对用户表的一些增删查修的service类,以便能够对数据库进行操作。这些操作也都是建立在能够连接数据库的基础上的,如果对于这些的基础的操作不是太了解的话,可以参考我的以下的博客
此时,你已能够简单的从数据库里面获取东西,插入东西,删除东西,更新条目了。
现在,需要建立一个web项目。这时,一些上面提到的东西都就可以分包归纳,以便于管理。
那么现在,就需要写一写给android后台提供数据的源代码了。
这里我主要是通过写一些servlet程序,给android提供后台的支持。
关于为什么要写servlet ,主要是,我最近写的一些的web 项目是用MVC框架模式写的。
可以参考我的博客:MVC相关内容
现在,最基本的东西已经就绪。
先说一下,android与后台是怎么进行数据传输的:通常,有两种传输的方式,一种是以XML的方式传输,另外一种是封装成JSON数据,以字符串的方式传输,(当然,关于封装成json数据,我们可以用网上一些打包好的类,也可以用自己的方式封装数据,关键是解析json数据的时候,要自己或他人能够解析出来。)在这里我用的是封装成json数据。
关于如何解析json数据的,会新开一篇博文详细介绍。
好了,一切就绪,我们就开干了。
首先写后台的返回请求数据的servlet程序(其实就是xxx.java的java程序)。
这里是以最近做的网球赛事管理系统作为例子的:
这时为android建立的包:
这里是登录后台的源码,下面,就来解释一下:
1.设置对提交数据的处理。
对于以GET方式提交的数据,在这里我们也是以 处理以POST方式提交的的程序 来处理。protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub // response.getWriter().append("Served at: ").append(request.getContextPath()); doPost(request, response); }
关于request 与response,就是两个HttpServletRequest,与HttpServletResponse类型的对象,主要是一些参数信息,以及一些对象。同时里面包含了一些基本的方法。
2.设置字符编码,防止乱码。
上面的是设置字符的编码,通常与android端设置的相对应。request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8");
3.获取参数
String name = request.getParameter("name"); String pwd = request.getParameter("pwd");
从请求对象中获取参数,这里的请求对象,是由客户端向服务端的请求。这里获取的是用户名和密码两个参数。
4.定义及声明一些稍后用到的引用变量。
competitorManager cpm = new competitorManagerimpl(); competitor cp =null; String json=null; StringBuilder sb = new StringBuilder(); PrintWriter out = response.getWriter(); String json1 ;
其中,competitorManager 是一个自己编写的对数据库competitor表操作的管理的接口,里面包含了一些对competitor操作的声明。其定义如下:
package cn.hpu.tennisGame.service; import java.util.List; import cn.hpu.tennisGame.model.competitor; public interface competitorManager { List<competitor> selectAll(); boolean addC(competitor c); boolean deleteC(competitor c); boolean updateC(competitor c); competitor selectOne(int id ); competitor selectOne(String name); }
具体的实现稍后将会以源码贴出,现在知道,是怎么回事就行了,
competitor selectOne(String name); 是从数据库中通过名字把这条项目的信息抽出,然后以competitor对象的形式返回,(就是将信息放到了对象里面,。),
关于competitor类,是写的一个model类,关于model类的描述,最后也会以代码的形式展现。
里面主要是,一些相关的属性。
PrintWriter out = response.getWriter(); 这个是冲响应对象获取打印对象。稍后将数据直接向外打印。
StringBuilder 是字符串生成器,在追加,插入字符(串)方面,性能好于StringBuffer ,.
这里是如果自己装配json数据的话,会用到,目前,这里用不到。因为,这里是用.jar包里面提供的类。
5.获取密码,并且判断是否相同,根据情况返回数据。
try { cp = cpm.selectOne(name); pwd =Integer.toString( (Integer.toString(pwd.hashCode())+cp.getUsername()).hashCode()); System.out.println(cp.getPassword()); if(cp==null) { json= AppInterface.toJson(0,"failed" , "User doesn't exist !"); } else if(cp.getPassword().equals(pwd)){ json= AppInterface.toJson(1,"success" , cp); }else { json= AppInterface.toJson(0,"failed" , "The password id wrong !"); } out.write(json); out.flush(); out.close(); } catch (Exception e) { // TODO: handle exception System.out.println(this.getServletName()+"#########"+e.getStackTrace()); }json是一个String 类型的字串。
5.1这里主要是,通过名字活取一个条目(封装在对象里面了)。
5.2取得从参数中获取的密码,经过一个求哈希值的运算,得到最终密码(数据库中存的密码)。
5.3从对象中获取用户密码。并且判断是否与用户输入密码的最终密码相同。如果相同,则以一种方式封装json数据信息,里面主要是状态码,信息,对象。
如下: 下面的方法在AppInterface里面
5.4 通过刚才的out,把json数据打印出去,public static String toJson(int code ,String msg ,Object obj) { String str=""; Map<String ,Object> map = toMap(code ,msg ,obj); JSONObject jObject = JSONObject.fromObject(map); return jObject.toString(); }//这个方法中的obj是一个含有一个对象信息的对象。,也可以是一个含有多个对象的map对象的list数组 public static String toJson(String msg,Object obj) { String str=""; Map<String , Object> map = toMap( msg, obj); JSONObject jObject = JSONObject.fromObject(map); return jObject.toString(); }out.write(json);
out.flush();
out.close();
下面的是:
android_login.java
package cn.hpu.tennisGame.android_servlet; import java.io.IOException; import java.io.PrintWriter; 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 cn.hpu.tennisGame.Interface.app.util.AppInterface; import cn.hpu.tennisGame.model.competitor; import cn.hpu.tennisGame.service.competitorManager; import cn.hpu.tennisGame.service.competitorManagerimpl; import net.sf.json.JSONObject; /** * Servlet implementation class android_login */ @WebServlet("/android_login") public class android_login extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public android_login() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub // response.getWriter().append("Served at: ").append(request.getContextPath()); doPost(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub // doGet(request, response); request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); String name = request.getParameter("name"); String pwd = request.getParameter("pwd"); competitorManager cpm = new competitorManagerimpl(); competitor cp =null; String json=null; StringBuilder sb = new StringBuilder(); PrintWriter out = response.getWriter(); String json1 ; try { cp = cpm.selectOne(name); pwd =Integer.toString( (Integer.toString(pwd.hashCode())+cp.getUsername()).hashCode()); System.out.println(cp.getPassword()); if(cp==null) { /* sb.append("[{"); sb.append("\"isSuccess\":"); sb.append("\"no\""); sb.append("}]"); out.write("wrong"); System.out.println("nnnnnnnnnnnnn"); */ json= AppInterface.toJson(0,"failed" , "User doesn't exist !"); } else if(cp.getPassword().equals(pwd)){ /*sb.append("[{"); sb.append("\"isSuccess\":"); sb.append("\"yes\""); sb.append("},"); sb.append("{"); sb.append(','); sb.append("\"username\":\"").append(cp.getUsername()).append("\","); sb.append("\"realname\":\"").append(cp.getRealname()).append("\","); sb.append("\"matchage\":").append(cp.getMatchage()).append(','); sb.append("\"borth\":\"").append(cp.getBorth()).append("\","); sb.append("\"address\":\"").append(cp.getAddress()).append("\","); sb.append("\"sex\":\"").append(cp.getSex()).append("\","); sb.append("\"password\":\"").append(cp.getPassword()).append("\","); sb.append("\"id\":").append(cp.getId()); sb.append("}]");*/ json= AppInterface.toJson(1,"success" , cp); <span style="font-size:18px;"></span><pre name="code" class="java"> //这部分是字自己写的封装的类,将一些信息封装到json数据里面了<pre> }else {json= AppInterface.toJson(0,"failed" , "The password id wrong !");}out.write(json);out.flush();out.close();} catch (Exception e) {// TODO: handle exceptionSystem.out.println(this.getServletName()+"#########"+e.getStackTrace());}out = response.getWriter();out.write(sb.toString());out.flush();out.close();}}
android 获取网络连接(登陆验证+获取数据)
最新推荐文章于 2025-05-05 08:30:23 发布
本文介绍如何在Android应用中实现用户登录验证,通过JSON数据格式与后台进行交互。涉及数据库操作、Servlet编程及JSON数据封装等内容。

4403

被折叠的 条评论
为什么被折叠?



