`
lovehui0228
  • 浏览: 101041 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Android用户登录

阅读更多

前几天和教我们计算机网络的老师讨论了一些关于手机应用发展前景的问题,学到了很多,有技术方面的,也有非技术方面的,他的观点就是手机网络游戏的发展大势所趋,即使目前技术还不够成熟.

 

所以说android会有越来越多涉及到后台交互的应用出现,既然要交互,显然登陆是第一步,今天做了下手机登陆,服务器验证用户名密码,还蛮顺利,贴下代码:

 

Server端,我用的tomcat:

package com.action.userAction;

import java.io.OutputStream;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.Action;

public class LoginCheckAction implements Action{
	
	private String userName;
	private String password;
	
	public String execute() throws Exception {
		// TODO Auto-generated method stub
		
		HttpServletRequest request = ServletActionContext.getRequest();
		
		userName = request.getParameter("userName");
		password = request.getParameter("password");
	
		
		HttpServletResponse response = ServletActionContext.getResponse();
		
		OutputStream os = response.getOutputStream();  
		
		if(!"lovehui".equals(userName) || !"1989".equals(password))
		{
			os.write(new Integer(-1));
		}
		else
		{
			os.write(new Integer(1));
		}
		
		response.setStatus(HttpServletResponse.SC_OK);
			 
		return null;

	}

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}
	

}

 

 

接下来是Client端,就贴最主要的一个Activity,有一点要注意下,就是本地回路地址不是常用的127.0.0.1,要换成10.0.2.2,原因也无法赘述,也是借鉴了网上别人的经验:

package src.siwi.map.android;

import java.io.DataInputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.Toast;
import android.widget.CompoundButton.OnCheckedChangeListener;

public class Login extends Activity {
	private String userName;
	private String password;
	
	private EditText view_userName;
	private EditText view_password;
	private CheckBox view_rememberMe;
	private Button view_loginSubmit;
	
	private static final int MENU_EXIT = Menu.FIRST - 1;
	private static final int MENU_ABOUT = Menu.FIRST;
	
	private final String SHARE_LOGIN_TAG = "MAP_SHARE_LOGIN_TAG";

	private String SHARE_LOGIN_USERNAME = "MAP_LOGIN_USERNAME";
	private String SHARE_LOGIN_PASSWORD = "MAP_LOGIN_PASSWORD";
	
	private boolean isNetError;
	
	private ProgressDialog proDialog;

	
	Handler loginHandler = new Handler() {
		public void handleMessage(Message msg) 
		{
			isNetError = msg.getData().getBoolean("isNetError");
			if(proDialog != null) 
			{
				proDialog.dismiss();
			}
			if(isNetError) 
			{
				Toast.makeText(Login.this, "当前网络不可用",
						Toast.LENGTH_SHORT).show();
			}
			else 
			{
				Toast.makeText(Login.this, "错误的用户名或密码",
						Toast.LENGTH_SHORT).show();
				
				clearSharePassword();
			}
		}
	};


	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.login);
		findViewsById();
		initView(false);
		
		setListener();
	}


	private void findViewsById() {
		view_userName = (EditText)findViewById(R.id.loginUserNameEdit);
		view_password = (EditText)findViewById(R.id.loginPasswordEdit);
		view_rememberMe = (CheckBox)findViewById(R.id.loginRememberMeCheckBox);
		view_loginSubmit = (Button)findViewById(R.id.loginSubmit);
	}

	
	private void initView(boolean isRememberMe) {
		SharedPreferences share = getSharedPreferences(SHARE_LOGIN_TAG, 0);
		String userName = share.getString(SHARE_LOGIN_USERNAME, "");
		String password = share.getString(SHARE_LOGIN_PASSWORD, "");
		Log.d(this.toString(), "userName=" + userName + " password=" + password);
		if (!"".equals(userName)) {
			view_userName.setText(userName);
		}
		if (!"".equals(password)) {
			view_password.setText(password);
			view_rememberMe.setChecked(true);
		}
		
		if (view_password.getText().toString().length() > 0) {
			// view_loginSubmit.requestFocus();
			// view_password.requestFocus();
		}
		share = null;
	}

	
	private boolean validateLocalLogin(String userName, String password, String validateUrl) {
		
		boolean loginState = false;
		HttpURLConnection conn = null;
		DataInputStream dis = null;
		try 
		{
			URL url = new URL(validateUrl);
			conn = (HttpURLConnection)url.openConnection();
			conn.setConnectTimeout(5000);
			conn.setRequestMethod("GET");	
			conn.connect();
		
			dis = new DataInputStream(conn.getInputStream());
			if(conn.getResponseCode() != HttpURLConnection.HTTP_OK) 
			{
				Log.d(this.toString(), "HTTP ERROR");
				isNetError = true;
				return false;
			}
			
			int loginStateInt = dis.read();

			Log.v("loginState", String.valueOf(loginStateInt));
			if(loginStateInt == 1) 
			{
				loginState = true;
			}
		} 
		catch (Exception e) 
		{
			e.printStackTrace();
			isNetError = true;
			Log.d(this.toString(), e.getMessage() + "  127 line");
		} 
		finally 
		{
			if(conn != null) 
			{
				conn.disconnect();
			}
		}
		
		if(loginState) 
		{
			if(isRememberMe()) 
			{
				saveSharePreferences(true, true);
			} 
			else 
			{
				saveSharePreferences(true, false);
			}
		} 
		else 
		{
			if(!isNetError)
			{
				clearSharePassword();
			}
		}
		if(!view_rememberMe.isChecked()) 
		{
			clearSharePassword();
		}
		
		Log.v("loginState", String.valueOf(loginState));
		return loginState;
	}

	
	private void saveSharePreferences(boolean saveUserName, boolean savePassword) {
		SharedPreferences share = getSharedPreferences(SHARE_LOGIN_TAG, 0);
		if(saveUserName) {
			Log.d(this.toString(), "saveUserName="
					+ view_userName.getText().toString());
			share.edit().putString(SHARE_LOGIN_USERNAME,
					view_userName.getText().toString()).commit();
		}
		if (savePassword) {
			share.edit().putString(SHARE_LOGIN_PASSWORD,
					view_password.getText().toString()).commit();
		}
		share = null;
	}

	
	private boolean isRememberMe() {
		if (view_rememberMe.isChecked()) {
			return true;
		}
		return false;
	}

	
	private OnClickListener submitListener = new OnClickListener() {
	
		public void onClick(View v) {
			proDialog = ProgressDialog.show(Login.this, "请稍候",
					"", true, true);
			
			Thread loginThread = new Thread(new LoginFailureHandler());
			loginThread.start();
		}
	};

	// .start();
	// }
	// };

	
	private OnCheckedChangeListener rememberMeListener = new OnCheckedChangeListener() {


		public void onCheckedChanged(CompoundButton buttonView,
				boolean isChecked) {
			if (view_rememberMe.isChecked()) {
				Toast.makeText(Login.this, "ischecked",
						Toast.LENGTH_SHORT).show();
			}
		}
	};


	

	
	private void setListener() {
		view_loginSubmit.setOnClickListener(submitListener);
		
		view_rememberMe.setOnCheckedChangeListener(rememberMeListener);
	}

	
	public boolean onCreateOptionsMenu(Menu menu) {
		super.onCreateOptionsMenu(menu);
		menu.add(0, MENU_EXIT, 0, getResources().getText(R.string.MENU_EXIT));
		menu.add(0, MENU_ABOUT, 0, getResources().getText(R.string.MENU_ABOUT));
		return true;
	}


	public boolean onMenuItemSelected(int featureId, MenuItem item) {
		super.onMenuItemSelected(featureId, item);
		switch (item.getItemId()) {
		case MENU_EXIT:
			finish();
			break;
		case MENU_ABOUT:
			alertAbout();
			break;
		}
		return true;
	}

	
	private void alertAbout() {
		new AlertDialog.Builder(Login.this).setTitle(R.string.MENU_ABOUT)
				.setMessage(R.string.aboutInfo).setPositiveButton(
						R.string.ok_label,
						new DialogInterface.OnClickListener() {
							public void onClick(
									DialogInterface dialoginterface, int i) {
							}
						}).show();
	}


	private void clearSharePassword() {
		SharedPreferences share = getSharedPreferences(SHARE_LOGIN_TAG, 0);
		share.edit().putString(SHARE_LOGIN_PASSWORD, "").commit();
		share = null;
	}

	class LoginFailureHandler implements Runnable {

		public void run() {
			userName = view_userName.getText().toString();
			password = view_password.getText().toString();
			
			String validateURL="http://10.0.2.2:8080/androidShopServer/loginCheck.action?userName="
				+ userName + "&password=" + password;
			boolean loginState = validateLocalLogin(userName, password,
					validateURL);
			Log.d(this.toString(), "validateLogin");

			if(loginState) 
			{	
				Intent intent = new Intent();
				intent.setClass(Login.this, IndexPage.class);
				Bundle bundle = new Bundle();
				bundle.putString("MAP_USERNAME", userName);
				intent.putExtras(bundle);
				
				startActivity(intent);
				proDialog.dismiss();
			} else {
				
				Message message = new Message();
				Bundle bundle = new Bundle();
				bundle.putBoolean("isNetError", isNetError);
				message.setData(bundle);
				loginHandler.sendMessage(message);
			}
		}

	}
}

 

分享到:
评论

相关推荐

    Android 用户登录界面

    首先,我们要理解Android用户登录界面的基本元素。通常,它包含两个输入框:一个用于用户名或电子邮件,另一个用于密码。此外,还包括登录按钮、注册链接、忘记密码选项以及可能的第三方登录方式(如Facebook、...

    android 用户登录界面

    首先,让我们详细了解一下Android用户登录界面的设计和实现: 1. **布局设计**:Android的用户登录界面通常由两部分组成——用户名或电子邮件输入框和密码输入框。这两个元素应清晰可见,易于点击或触摸。此外,...

    android用户登录代码

    ### Android用户登录代码详解 #### 一、概览 本文档将详细介绍一个基于Eclipse开发环境的Android应用程序中的用户登录功能实现。此登录模块通过网络请求来验证用户的用户名和密码,同时提供了记住密码的功能。 ##...

    android用户登录界面设计

    ### Android 用户登录界面设计知识点详解 #### 一、布局文件解析 在Eclipse开发环境中创建Android应用程序时,用户登录界面的设计通常通过XML布局文件来实现。以下是对给定的XML布局文件进行详细解析: 1. **根...

    Android用户登录示例

    Android Studio工程,实现用户登录,使用volley进行http请求,需要配合php和mysql。

    Android代码-用户注册登录的简单实现.zip

    首先,让我们详细探讨一下Android用户注册登录的基本流程和涉及的技术点: 1. **界面设计**:使用Android Studio的XML布局文件创建用户注册和登录界面。通常包括输入框(EditText)用于收集用户名、密码,以及提交...

    Android接口实现登录注册

    2. 用户登录:登录功能则需要验证用户提供的凭证,通常是用户名或邮箱和密码的组合。客户端发送请求到服务器,服务器通过比对数据库中的信息来确认登录的合法性。为了用户体验,通常还会包含“记住我”选项,以便在...

    Android制作的用户登录界面效果.rar

    一个简单明了的Android用户登录界面效果,通过这个小示例,你不但可以学习android在界面布局方面的小技巧,还可以学习一下按钮注册单击事件、设置Spinner下拉的样式、初始化Spinner的数据、将Adapter与Spinner绑定、...

    Android用户登陆和注册界面

    下面将详细讲解这个主题,包括Android用户登录和注册界面的设计、实现以及与服务器端的交互。 首先,设计一个用户友好的登录和注册界面至关重要。界面通常包括输入框(EditText)供用户输入用户名、密码,可能还...

    Android实现用户登录记住密码功能

    下面是实现Android用户登录记住密码功能的详细介绍。 一、实现记住密码的原理 在Android中,实现记住密码的原理是通过共享参数(SharedPreferences)来存储用户的用户名和密码。SharedPreferences是一个轻量级的...

    Android实现登陆注册连接数据库操作完整代码

    - 用户登录成功后,为了保持登录状态,应用可能会使用SharedPreferences来存储用户信息,如token,以便后续的API调用。 10. **异常处理**: - 在处理用户输入和数据库操作时,需要考虑可能出现的异常情况,比如...

    分享一个基础的Android 用户登录判断实例.rar

    Android 判断用户名和密码登录的过程,这是一个演示实例,本代码从获取EditText和Button开始,一步一步演示一个用户名登录的过程,包括了添加button监听器,取值,创建url,url的连接,判断是否登录成功标志位,判断...

    android用户登陆界面

    总结,构建一个Android用户登录界面涵盖了界面设计、数据验证、异步处理、安全性等多个方面。开发者需要综合运用Android的各种组件和框架,同时关注用户体验和数据安全,以创建一个高效、安全且用户友好的登录系统。

    Android注册登录功能

    11. **登录状态保持与自动登录**: 可以使用Session管理或Token机制,实现用户登录后的状态保持,下次打开应用时可直接进入主界面。 12. **验证码技术**: 为了增强安全性,注册或登录时可能会使用短信验证码或图形...

    课堂资源代码(Android-用户登录 App)

    【Android 用户登录 App 开发详解】 在Android平台上开发用户登录应用...以上就是Android用户登录App开发的基本流程和关键知识点。实际开发中,还需要考虑性能优化、用户体验、多语言支持等多个方面,不断迭代和完善。

    【Android】用户登录注册界面开发及用户信息管理案例代码详解-附件资源.zip

    总结,构建Android用户登录注册界面及用户信息管理系统涉及多个方面,包括界面设计、数据验证、服务器通信以及用户信息的存储和管理。理解并掌握这些技术是成为一名合格Android开发者的基础。通过分析提供的代码案例...

    Android 用户注册,登录的简单实现.zip

    总的来说,这个项目提供了一个简单的Android用户注册和登录流程的示例,涵盖了从界面设计到后台逻辑的一系列技术点。开发者可以通过阅读源码,学习如何在实际项目中实现这些功能,提升自己的Android开发技能。

    android简单登录界面

    Android 简单登录界面设计 Android简单登录界面是一个基本的Android应用程序开发项目,它允许用户输入用户名和密码,然后点击“Login”按钮以验证用户身份。如果用户名为admin,密码为123,则显示“登录成功”;...

Global site tag (gtag.js) - Google Analytics