本文实现了一个android客户端输入用户名和密码登录跳转到其他android客户端界面的简单demo,主要是熟悉android客户端的网络编程,服务端的编程,数据库的操作。

1、android客户端

主界面如下所示:

android客户端和servlet服务端的简单登录实现_第1张图片

对应的布局文件:

activity_main.xml

                                                                                                            

上述布局对应的Java代码:

package com.yqq.loginclient;import com.yqq.loginclient.utils.LoginUtils;import android.app.Activity;import android.content.Intent;import android.os.AsyncTask;import android.os.Bundle;import android.text.TextUtils;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;public class MainActivity extends Activity {private EditText mUserName;private  EditText mPassword;private Button mLogin;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mUserName=(EditText) findViewById(R.id.et_user_name);        mPassword=(EditText) findViewById(R.id.et_user_password);        mLogin=(Button) findViewById(R.id.btn_sure);        mLogin.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {if(TextUtils.isEmpty(mUserName.getText().toString().trim())||TextUtils.isEmpty(mPassword.getText().toString().trim())){Toast.makeText(MainActivity.this, "数据不能为空!!!", 300).show();}else{new AsyncTask() {String result1=null;@Overrideprotected Void doInBackground(Void... params) {//必须开启子线程访问网络//提交数据到服务器result1=LoginUtils.connect("172.22.122.1", mUserName.getText().toString().trim(), mPassword.getText().toString().trim());return null;}@Overrideprotected void onPostExecute(Void result) {if(result1==null){return ;}if(result1.equals("welldone")){startActivity(new Intent(MainActivity.this,MyTestActivity.class));finish();}else{Toast.makeText(MainActivity.this,result1,300).show();}super.onPostExecute(result);}}.execute();}}});    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.main, menu);        return true;    }    }






登录成功后跳转到该界面
android客户端和servlet服务端的简单登录实现_第2张图片

对应的布局文件my_test_activity_layout.xml

<?xml version="1.0" encoding="utf-8"?>    


上述布局对应的Java代码:

package com.yqq.loginclient;import android.app.Activity;import android.os.Bundle;public class MyTestActivity extends Activity {public MyTestActivity() {// TODO Auto-generated constructor stub}@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.my_test_activity_layout);}}


联网访问服务器的工具类:

package com.yqq.loginclient.utils;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.Reader;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;/** * 连接服务器 *  * @author yqq_coder *  */public class LoginUtils {public LoginUtils() {// TODO Auto-generated constructor stub}/** * http://10.1.17.208:8080/LoginService/LoginServlet?userName=Lihua&passWord=123456 * http://localhost:8080/?userName=Lihua&passWord=123456 * @param ip 服务器IP * @param userName GET方式传递参数用户名 * @param passWord 密码 * @return  */public static String connect(String ip, String userName, String passWord) {String str = "http://" + ip+ ":8080/LoginService/LoginServlet?userName="+userName+"&passWord="+passWord;URL url=null;InputStream inputStream = null;HttpURLConnection connection = null;StringBuffer sb = null;// 线程安全try {url = new URL(str);//获得URL对象try {connection = (HttpURLConnection) url.openConnection();connection.setConnectTimeout(3000);connection.setRequestMethod("GET");//GET方式提交参数connection.setDoOutput(true);//设置可以向服务器读写connection.setDoInput(true);//请求成功if (connection.getResponseCode() == 200) {inputStream = connection.getInputStream();Reader reader = new InputStreamReader(inputStream, "UTF-8");//打包成字符流BufferedReader bufferedReader = new BufferedReader(reader);String str1 = null;sb = new StringBuffer();while ((str1 = bufferedReader.readLine()) != null) {sb.append(str1);}}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}} catch (MalformedURLException e) {e.printStackTrace();//关闭流很重要} finally {if (inputStream != null) {try {inputStream.close();inputStream = null;} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if (connection != null) {connection.disconnect();connection = null;}}if (sb != null) {return new String(sb);}return "服务器异常!";}}


客户端demo下载地址:http://download.csdn.net/detail/u014600432/8187637


2、servlet服务端

2.1开启MySQL数据库。

方式一、利用命令行操作数据库

(1)命令行执行 create database logininfo;创建logininfo数据库。

(2)创建数据表


(3)插入数据

android客户端和servlet服务端的简单登录实现_第3张图片

中文不成功,要改变编码方式。

(4)查询结果

android客户端和servlet服务端的简单登录实现_第4张图片

(5)其他

android客户端和servlet服务端的简单登录实现_第5张图片


android客户端和servlet服务端的简单登录实现_第6张图片

方式二、写Java代码用JDBC框架操作数据库

类似数据库操作代码如下:

import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.Statement;import java.util.ArrayList;import java.util.List;import org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject;public class DbUtis {private static Connection conn;public static JSONArray getData(String name) throws SQLException {List infos = new ArrayList();JSONArray array = new JSONArray();GpsInfo info = null;JSONObject jsonObject = null;PreparedStatement pstmt =null;ResultSet rs = null;// 连接数据库try {Class.forName("com.mysql.jdbc.Driver");// 链接数据库conn =   DriverManager.getConnection("jdbc:mysql://192.168.253.1:3306/test", "root", "admin");// Statement stmt =(Statement) conn.prepareStatement("");String sql="select name,longitude,latitude from gpsinfos where name=?";pstmt=  conn.prepareStatement(sql);pstmt.setString(1, name);rs = pstmt.executeQuery();// 从结果集里取值//System.out.println(rs.getRow());while (rs.next()) {// info=new GpsInfo();// info.setLatitude(rs.getString(0));//纬度// info.setLongitude(rs.getString(1));// infos.add(info);// info=null;jsonObject = new JSONObject();try {jsonObject.put("name", rs.getString("name"));jsonObject.put("longitude", rs.getString("longitude"));jsonObject.put("latitude", rs.getString("latitude"));array.put(jsonObject);jsonObject=null;} catch (JSONException e) {// TODO Auto-generated catch blocke.printStackTrace();} }} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}finally {if (rs != null) {rs.close();rs = null;}if(pstmt!=null){pstmt.close();pstmt = null;}if (conn != null) {conn.close();conn = null;}}return array;}public static void insertGpsInfos(GpsInfo info) throws SQLException{PreparedStatement pstmt = null; // 数据库表达式        ResultSet rs = null; // 结果集        try {            /*加载驱动*/        //192.168.173.1            Class.forName("com.mysql.jdbc.Driver");            /*连接到数据库*/            conn =   DriverManager.getConnection(                    "jdbc:mysql://localhost:3306/test", "root", "admin");            String sql = "insert into gpsinfos (name,longitude,latitude) values (?,?,?)";            /* 获取表达式*/             pstmt =  conn.prepareStatement(sql);             pstmt.setString(1,info.getName());            pstmt.setString(2, info.getLongitude());            pstmt.setString(3, info.getLatitude());            /*  插入数据*/           pstmt.execute();            /* 执行SQL*/            rs = pstmt.executeQuery("select * from gpsinfos");            /* 查看里面的数据*/            while (rs.next()) {             System.out.println("姓名=" + rs.getString("name"));                System.out.println("经度=" + rs.getString("longitude"));                System.out.println("纬度=" + rs.getString("latitude"));            }                } catch (SQLException ex) {            ex.printStackTrace();        } catch (Exception e) {            // TODO Auto-generated catch block            e.printStackTrace();        }finally{                if(rs!=null){        rs.close();        }        if(pstmt!=null){pstmt.close();pstmt = null;}                if(conn!=null){        conn.close();        }                        }    }public static void createTable() throws SQLException{try {//Class.forName("com.mysql.jdbc.Driver");Connection conn =  DriverManager.getConnection("jdbc:mysql://192.168.173.1:3306/test","root","admin");String sql = "CREATE TABLE gpsinfos (id int primary key auto_increment, name varchar(64) not null, longitude varchar(256) not null , latitude varchar(256) not null );";PreparedStatement pstmt =  conn.prepareStatement(sql);pstmt.executeUpdate();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static void main(String[]args) throws SQLException{/*try {createTable();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}*///insertGpsInfos(new GpsInfo("小强","5225.1111111","5333333.888222"));System.out.println(DbUtis.getData("Lihua"));}}

本文的数据库操作类如下:

package com.yqq.loginservice.DButis;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import javax.transaction.Synchronization;//JDBC框架完成数据库查询public class TestDbUtils {// 表示定义数据库的用户名private final String USERNAME = "root";// 定义数据库的密码private final String PASSWORD = "admin";// 定义数据库的驱动信息private final static String DRIVER = "com.mysql.jdbc.Driver";//定义数据库连接private static Connection mConnection;//定义访问数据库的地址private final String URL = "jdbc:mysql://172.22.122.1:3306/logininfo";// 定义sql语句的执行对象可以防止输入注入private PreparedStatement pstmt;// 定义查询返回的结果集合private ResultSet resultSet;//静态快加载驱动static{try {Class.forName(DRIVER);} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}}private static TestDbUtils mTestDbUtils;public static synchronized TestDbUtils getSington(){if(mTestDbUtils==null){mTestDbUtils=new TestDbUtils();}return mTestDbUtils;}public  List> getCheckUserInfo() {List> results=new ArrayList>();Map result=null;try {//获得数据库连接mConnection=DriverManager.getConnection(URL, "root", "admin");//获得SQL语句执行对象String sql="select name,password from user";pstmt=mConnection.prepareStatement(sql);resultSet=pstmt.executeQuery();while(resultSet.next()){result=new HashMap();result.put("userName", resultSet.getString("name"));result.put("passWord", resultSet.getString("password"));results.add(result);result=null;}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{//先关结果集if(resultSet!=null){try {resultSet.close();resultSet=null;} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}//再关SQL语句执行对象if(pstmt!=null){try {pstmt.close();pstmt=null;} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}//最后关数据库连接if(mConnection!=null){try {mConnection.close();mConnection=null;} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}return results;}private TestDbUtils(){}}

2.2servlet子类

package com.yqq.loginservice;import java.io.IOException;import java.io.PrintWriter;import java.util.ArrayList;import java.util.List;import java.util.Map;import javax.servlet.ServletConfig;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.yqq.loginservice.DButis.TestDbUtils;public class LoginServlet extends HttpServlet {private TestDbUtils mTestDbUtils;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {//设置编码req.setCharacterEncoding("UTF-8");resp.setContentType("text/html;charset=utf-8");resp.setCharacterEncoding("utf-8");PrintWriter out=resp.getWriter();//获得客户端提交的参数String uesrName=req.getParameter("userName");String password=req.getParameter("passWord");System.out.print("提交的参数:"+uesrName+password);if(checkLogin(uesrName, password)){out.write("welldone");System.out.print("返回的数据:"+"welldone"+"登录成功");}else{out.write("登录失败该用户不存在!请先注册!");System.out.print("返回的数据:"+"登录失败该用户不存在!请先注册!");}out.flush();}/** * 查询数据库检查是否有该参数存在 * @param userName用户名 * @param password密码 * @return */private boolean checkLogin(String userName,String password){List> results=new ArrayList>();//获得数据库操作实例mTestDbUtils=TestDbUtils.getSington();results=mTestDbUtils.getCheckUserInfo();System.out.println(results.toString());for(Map map:results){if(map.get("userName").equals(userName)&&map.get("passWord").equals(password)){return true;}}return false;}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {doGet(req,resp);}@Overrideprotected void service(HttpServletRequest arg0, HttpServletResponse arg1)throws ServletException, IOException {// TODO Auto-generated method stubsuper.service(arg0, arg1);}@Overridepublic void destroy() {// TODO Auto-generated method stubsuper.destroy();}@Overridepublic void init(ServletConfig config) throws ServletException {// TODO Auto-generated method stubsuper.init(config);}}

该类必须进行配置:

android客户端和servlet服务端的简单登录实现_第7张图片


用http协议访问的时候:http://ip+web工程名+servlet子类。

http://10.1.17.208:8080/LoginService/LoginServlet?userName=Lihua&passWord=123456

demo下载地址:http://download.csdn.net/detail/u014600432/8187651





更多相关文章

  1. android SQLite数据库存储数据
  2. Android 数据库简单操作
  3. android客户端向服务端传汉字乱码问题
  4. SSH服务器与Android通信(2)--Android客户端接收数据
  5. 在Android中创建和使用数据库
  6. HNU_团队项目_Android和数据库对接出现问题总结
  7. Android中数据存储——SQLite数据库存储数据
  8. android客户端控制树莓派GPIO点亮LED灯

随机推荐

  1. Android基于Ffmpeg 的软编软解的可视对讲
  2. [Android1.6]横竖屏切换时自动弹出键盘的
  3. 手机改 user模式为debug模式
  4. 使用android真机测试http网络连接异常解
  5. Android常用布局范例
  6. Android(安卓)Zxing集成
  7. Android(安卓)网络请求框架总结(二)
  8. Android控制使用视频教程
  9. 《Android群英传》读书笔记(7)第六章:Androi
  10. 自己动手做android热更新框架