Android开发之登录验证

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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://192.168.1.104: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;
	}

}

  红色的为自己电脑的IP地址。 

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

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

  写到这里基本已经把Android向服务器端发送数据,给大家分享完毕,如有不对的地方还望指正。

以上是关于Android开发之登录验证的主要内容,如果未能解决你的问题,请参考以下文章

Android开发之聊天室

Android开发之聊天室

android:当用户触摸片段外部时,我如何关闭片段?

开发人员错误验证 Gmail 登录 Android - 异常 10

Android开发常用代码片段

Express实战 - 应用案例- realworld-API - 路由设计 - mongoose - 数据验证 - 密码加密 - 登录接口 - 身份认证 - token - 增删改查API(代码片段