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

前端技术 2023/09/03 Android

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

本文地址:https://www.stayed.cn/item/7560

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。