首页 > 系统 > Android > 正文

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

2020-04-11 11:44:43
字体:
来源:转载
供稿:网友

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表