·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> app软件开发 >> Android开发 >> Android开发之登录验证实例教程

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

作者:佚名      Android开发编辑:admin      更新时间:2022-07-23

本文所述实例源自一个项目开发中的登录验证功能,具体的要求就是,在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程序设计有所帮助。