zoukankan      html  css  js  c++  java
  • 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向服务器端发送数据,给大家分享完毕,如有不对的地方还望指正。

  • 相关阅读:
    纯CSS星级评价
    Enterprise Library启用签名后发生 PublicKeyToken错误,HRESULT:0x80131040解决
    SQL Server
    该如何选择国外VPS
    网站的伪静态化
    kernel FIELD_SIZEOF宏 NULL地址不访问不出错
    Activity的四种加载模式
    Git magic 简短git使用命令集
    为什么包含多句代码的宏要用do while包括起来?
    使用lsof来查看FD和进程的关系
  • 原文地址:https://www.cnblogs.com/AndroidJotting/p/3911441.html
Copyright © 2011-2022 走看看