当前位置: 移动技术网 > IT编程>移动开发>Android > Android开发之登录验证实例教程

Android开发之登录验证实例教程

2019年07月24日  | 移动技术网IT编程  | 我要评论

雷阵雨,龙虱子,关于花的资料

本文所述实例源自一个项目开发中的登录验证功能,具体的要求就是,在android端输入用户名和密码,在服务器端验证mysql数据库中是否有此用户,实现之前当然首要的是,如何使android端的数据发送到服务器端,具体的实现方法如下:

服务器端:manageservlet.java代码如下:

public class manageservlet extends httpservlet {
  public void doget(httpservletrequest request, httpservletresponse response)
      throws servletexception, ioexception {
    request.setcharacterencoding("utf-8");
    response.setcharacterencoding("utf-8");
    string name = request.getparameter("name");
    string password = request.getparameter("password");
    system.out.println("用户名:"+name+" 密码:"+password);
  }
  public void dopost(httpservletrequest request, httpservletresponse response)
      throws servletexception, ioexception {
  }
}

在这里实现的仅仅是把用户端的数据在控制台打印出来,相信学过jsp开发的大神,剩下的数据验证应该不在话下,在此不再赘述。

接下来就是android端了:

主activity:mainactivity.java页面代码如下:

public class mainactivity extends activity {
  private edittext textname = null;
  private edittext textpassword = null;
  private button button = null;
  @override
  protected void oncreate(bundle savedinstancestate) {
    super.oncreate(savedinstancestate);
    setcontentview(r.layout.activity_main);
     
    textname = (edittext)findviewbyid(r.id.name);
    textpassword = (edittext)findviewbyid(r.id.password);
    button = (button)findviewbyid(r.id.button);
     
    button.setonclicklistener(new mybuttonlistener());
     
  }
  class mybuttonlistener implements onclicklistener{
    boolean result=false;
    string name;
    string password;
    public void onclick(view v) {
      try {        
        name = textname.gettext().tostring();
        name = new string(name.getbytes("iso8859-1"), "utf-8");
        password = textpassword.gettext().tostring();
        password = new string(password.getbytes("iso8859-1"), "utf-8");
      } catch (unsupportedencodingexception e1) {
        // todo auto-generated catch block
        e1.printstacktrace();
      }
      try {
        result = newsservice.save(name,password);
      } catch (exception e) {
        // todo auto-generated catch block
        e.printstacktrace();
      }
      if(result){
        toast.maketext(mainactivity.this, r.string.ok, toast.length_short).show();
      }else{
        toast.maketext(mainactivity.this, r.string.error, toast.length_short).show();
      }
    }
  }
}

布局文件如下:

<relativelayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  tools:context="${relativepackage}.${activityclass}"
  >
  <linearlayout 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    >
    <textview
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="@string/name" />
    <edittext 
      android:id="@+id/name"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:hint="@string/playname"
      android:singleline="true"
      />
    <textview
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="@string/password" />
    <edittext 
      android:id="@+id/password"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:password="true"
      android:hint="@string/playpass"
      android:singleline="true"
      />
    <button 
      android:id="@+id/button"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:onclick=""
      android:text="@string/submit"
      />
  </linearlayout>
</relativelayout>

用于向服务器端发送数据的service(newsservice):

public class newsservice {
  /**
   * 登录验证
   * @param name 姓名
   * @param password 密码
   * @return
   */
  public static boolean save(string name, string password){
    string path = "http://<span style="color: #ff0000;"><strong>192.168.1.104</strong></span>:8080/register/manageservlet"; 
    map<string, string> student = new hashmap<string, string>();
    student.put("name", name);
    student.put("password", password);
    try {
      return sendgetrequest(path, student, "utf-8");
    } catch (exception e) {
      // todo auto-generated catch block
      e.printstacktrace();
    }
    return false;
  }
  /**
   * 发送get请求
   * @param path  请求路径
   * @param student  请求参数
   * @return 请求是否成功
   * @throws exception
   */
  private static boolean sendgetrequest(string path, map<string, string> student, string ecoding) throws exception{
    // http://127.0.0.1:8080/register/manageservlet?name=1233&password=abc
    stringbuilder url = new stringbuilder(path);
    url.append("?");
    for(map.entry<string, string> map : student.entryset()){
      url.append(map.getkey()).append("=");
      url.append(urlencoder.encode(map.getvalue(), ecoding));
      url.append("&");
    }
    url.deletecharat(url.length()-1);
    system.out.println(url);
    httpsurlconnection conn = (httpsurlconnection)new url(url.tostring()).openconnection();
    conn.setconnecttimeout(100000);
    conn.setrequestmethod("get");
    if(conn.getresponsecode() == 200){
      return true;
    }
    return false;
  }
}

因为需要连接网络,一定要在androidmanifest.xml进行网络权限配置:

<uses-permission android:name="android.permission.internet"/>

至此基本已经完成android向服务器端发送数据,希望本文实例对大家的android程序设计有所帮助。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网