06登录界面逻辑

来源:互联网 发布:java模拟浏览器 编辑:程序博客网 时间:2024/06/05 12:33

需要在登录界面完成下面的功能。

1.注册和登录按钮的响应的事件

2.用户名改变时,EditText应该监听到,将用户名置为空;

3.onCreate未加载(setContentView)之前,如果用户名和密码均存在,则直接登录到主界面。

4.登录按钮点击的时候弹出AlertDialog,设置nickname.

5.设置完nickname之后,通过startActivityForResult把值传入onActivityResult

分别看下:

注册事件:

/** * 按钮的点击响应事件 *  * @param view */public void register(View view){startActivity(new Intent(LoginActivity.this,RegisterActivity.class));}
登录事件:

public void login(View view) {if (!CommonUtils.isNetWorkConnected(this)) {Toast.makeText(LoginActivity.this,R.string.network_isnot_available, Toast.LENGTH_SHORT).show();return;}Intent intent = new Intent(LoginActivity.this, AlertDialog.class);intent.putExtra("editTextShow", true);// 作用?intent.putExtra("titleIsCancel", true);// 作用?intent.putExtra("msg", "请设置当前用户的昵称\n为了ios离线推送不是userid而是nick,详情见注释");startActivityForResult(intent, REQUEST_CODE_SETNICK);}

2.用户名改变时,EditText应该监听到,将用户名置为空;此处的代码当时调试的时候,出现了空指针异常,加上判断条件之后,解决了。

usernameEditText = (EditText) findViewById(R.id.username);passwordEditText = (EditText) findViewById(R.id.password);if (usernameEditText != null) {// 如果用户名改变,清空密码usernameEditText.addTextChangedListener(new TextWatcher() {@Overridepublic void onTextChanged(CharSequence s, int start, int before,int count) {passwordEditText.setText(null);}@Overridepublic void beforeTextChanged(CharSequence s, int start, int count,int after) {}@Overridepublic void afterTextChanged(Editable s) {}});

3.onCreate未加载(setContentView)之前,如果用户名和密码均存在,则直接登录到主界面。


@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 如果用户名和密码都有,直接进入主界面if (IMApplication.getInstance().getUserName() != null&& IMApplication.getInstance().getPassword() != null) {autoLogin = true;startActivity(new Intent(LoginActivity.this, MainActivity.class));return;}requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_login);

onActivityResult方法比较长,先分析下他的功能。

1.获取登录的用户名和密码,显示“正在登录”对话框:

IMApplication.currentUserNick = data.getStringExtra("edittext");final String username = usernameEditText.getText().toString();final String password = passwordEditText.getText().toString();if (!TextUtils.isEmpty(username)&& !TextUtils.isEmpty(password)) {progressShow = true;final ProgressDialog pd = new ProgressDialog(LoginActivity.this);pd.setCanceledOnTouchOutside(false);pd.setOnCancelListener(new OnCancelListener() {@Overridepublic void onCancel(DialogInterface dialog) {progressShow = false;}});pd.setMessage("正在登陆...");pd.show();


2.EMChatManager实例的登录接口的三个方法的实现:如图:



先看简单的:处理登录失败的:

通过runOnUiThread在主线程中让对话框消失,弹出吐司,代码如下:

@Overridepublic void onError(int code,final String message) {if (!progressShow) {return;}runOnUiThread(new Runnable() {@Overridepublic void run() {pd.dismiss();Toast.makeText(getApplicationContext(),"登录失败:" + message,Toast.LENGTH_SHORT).show();}});}


登录成功之后,保存下用户名和密码,通过runOnUiThread在UI上通知用户在加载消息列表,

@Overridepublic void onSuccess() {if (!progressShow) {return;}// 登陆成功,保存用户名和密码IMApplication.getInstance().setUserName(username);IMApplication.getInstance().setPassword(password);runOnUiThread(new Runnable() {@Overridepublic void run() {pd.setMessage("正在获取好友和群聊列表");}});

第一次登陆或者之前logout后,加载所有本地群和会话


EMGroupManager.getInstance().loadAllGroups();EMChatManager.getInstance().loadAllConversations();List<String> usernames = EMContactManager.getInstance().getContactUserNames();Log.i(TAG, usernames.size() + "");Map<String, User> userlist = new HashMap<String, User>();for (String username : usernames) {User user = new User();user.setUsername(username);setUserHeader(username, user);userlist.put(username, user);}// 添加user"申请与通知"User newFriends = new User();newFriends.setUsername(Constant.NEW_FRIENDS_USERNAME);newFriends.setNick("申请与通知");newFriends.setHeader("");userlist.put(Constant.NEW_FRIENDS_USERNAME,newFriends);// 添加群聊User groupUser = new User();groupUser.setUsername(Constant.GROUP_USERNAME);groupUser.setNick("群聊");groupUser.setHeader("");userlist.put(Constant.GROUP_USERNAME,groupUser);// 存入内存IMApplication.getInstance().setContactList(userlist);// 存入dbUserDao dao = new UserDao(LoginActivity.this);List<User> users = new ArrayList<User>(userlist.values());dao.saveContactList(users);// 获取群聊列表(群聊只有groupid和groupname的简单信息)EMGroupManager.getInstance().getGroupsFromServer();} catch (Exception e) {e.printStackTrace();}boolean updatenick = EMChatManager.getInstance().updateCurrentUserNick(IMApplication.currentUserNick);if (!updatenick) {Log.e(TAG,"update current user nick fail");}if (!LoginActivity.this.isFinishing()) {pd.dismiss();}


跳转:


// 进入主界面startActivity(new Intent(LoginActivity.this,MainActivity.class));finish();


全部的代码:

package com.dy.ustc.im.ui;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import com.dy.ustc.im.Constant;import com.dy.ustc.im.R;import com.dy.ustc.im.application.IMApplication;import com.dy.ustc.im.db.UserDao;import com.dy.ustc.im.domain.User;import com.dy.ustc.im.utils.CommonUtils;import com.easemob.EMCallBack;import com.easemob.chat.EMChatManager;import com.easemob.chat.EMContactManager;import com.easemob.chat.EMGroupManager;import com.easemob.chat.core.g;import com.easemob.exceptions.EaseMobException;import com.easemob.util.HanziToPinyin;import android.app.ProgressDialog;import android.content.DialogInterface;import android.content.DialogInterface.OnCancelListener;import android.content.Intent;import android.os.Bundle;import android.text.Editable;import android.text.TextUtils;import android.text.TextWatcher;import android.util.Log;import android.view.View;import android.view.Window;import android.widget.EditText;import android.widget.Toast;public class LoginActivity extends BaseActivity {public static final int REQUEST_CODE_SETNICK = 1;protected static final String TAG = "LoginActivity";private boolean progressShow;private EditText usernameEditText;private EditText passwordEditText;private boolean autoLogin = false;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 如果用户名和密码都有,直接进入主界面if (IMApplication.getInstance().getUserName() != null&& IMApplication.getInstance().getPassword() != null) {autoLogin = true;startActivity(new Intent(LoginActivity.this, MainActivity.class));return;}requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_login);usernameEditText = (EditText) findViewById(R.id.username);passwordEditText = (EditText) findViewById(R.id.password);if (usernameEditText != null) {// 如果用户名改变,清空密码usernameEditText.addTextChangedListener(new TextWatcher() {@Overridepublic void onTextChanged(CharSequence s, int start, int before,int count) {passwordEditText.setText(null);}@Overridepublic void beforeTextChanged(CharSequence s, int start, int count,int after) {}@Overridepublic void afterTextChanged(Editable s) {}});}}public void login(View view) {if (!CommonUtils.isNetWorkConnected(this)) {Toast.makeText(LoginActivity.this,R.string.network_isnot_available, Toast.LENGTH_SHORT).show();return;}Intent intent = new Intent(LoginActivity.this, AlertDialog.class);intent.putExtra("editTextShow", true);// 作用?intent.putExtra("titleIsCancel", true);// 作用?intent.putExtra("msg", "请设置当前用户的昵称\n为了ios离线推送不是userid而是nick,详情见注释");startActivityForResult(intent, REQUEST_CODE_SETNICK);}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (resultCode == RESULT_OK) {if (requestCode == REQUEST_CODE_SETNICK) {IMApplication.currentUserNick = data.getStringExtra("edittext");final String username = usernameEditText.getText().toString();final String password = passwordEditText.getText().toString();if (!TextUtils.isEmpty(username)&& !TextUtils.isEmpty(password)) {progressShow = true;final ProgressDialog pd = new ProgressDialog(LoginActivity.this);pd.setCanceledOnTouchOutside(false);pd.setOnCancelListener(new OnCancelListener() {@Overridepublic void onCancel(DialogInterface dialog) {progressShow = false;}});pd.setMessage("正在登陆...");pd.show();EMChatManager.getInstance().login(username, password,new EMCallBack() {@Overridepublic void onSuccess() {if (!progressShow) {return;}// 登陆成功,保存用户名和密码IMApplication.getInstance().setUserName(username);IMApplication.getInstance().setPassword(password);runOnUiThread(new Runnable() {@Overridepublic void run() {pd.setMessage("正在获取好友和群聊列表");}});try {// 第一次登陆或者之前logout后,加载所有本地群和会话EMGroupManager.getInstance().loadAllGroups();EMChatManager.getInstance().loadAllConversations();List<String> usernames = EMContactManager.getInstance().getContactUserNames();Log.i(TAG, usernames.size() + "");Map<String, User> userlist = new HashMap<String, User>();for (String username : usernames) {User user = new User();user.setUsername(username);setUserHeader(username, user);userlist.put(username, user);}// 添加user"申请与通知"User newFriends = new User();newFriends.setUsername(Constant.NEW_FRIENDS_USERNAME);newFriends.setNick("申请与通知");newFriends.setHeader("");userlist.put(Constant.NEW_FRIENDS_USERNAME,newFriends);// 添加群聊User groupUser = new User();groupUser.setUsername(Constant.GROUP_USERNAME);groupUser.setNick("群聊");groupUser.setHeader("");userlist.put(Constant.GROUP_USERNAME,groupUser);// 存入内存IMApplication.getInstance().setContactList(userlist);// 存入dbUserDao dao = new UserDao(LoginActivity.this);List<User> users = new ArrayList<User>(userlist.values());dao.saveContactList(users);// 获取群聊列表(群聊只有groupid和groupname的简单信息)EMGroupManager.getInstance().getGroupsFromServer();} catch (Exception e) {e.printStackTrace();}boolean updatenick = EMChatManager.getInstance().updateCurrentUserNick(IMApplication.currentUserNick);if (!updatenick) {Log.e(TAG,"update current user nick fail");}if (!LoginActivity.this.isFinishing()) {pd.dismiss();}// 进入主界面startActivity(new Intent(LoginActivity.this,MainActivity.class));finish();}@Overridepublic void onProgress(int arg0, String arg1) {}@Overridepublic void onError(int code,final String message) {if (!progressShow) {return;}runOnUiThread(new Runnable() {@Overridepublic void run() {pd.dismiss();Toast.makeText(getApplicationContext(),"登录失败:" + message,Toast.LENGTH_SHORT).show();}});}});}}}}/** * 按钮的点击响应事件 *  * @param view */public void register(View view){startActivity(new Intent(LoginActivity.this,RegisterActivity.class));}@Overrideprotected void onResume() {super.onResume();if (autoLogin) {return;}if (IMApplication.getInstance().getUserName() != null) {usernameEditText.setText(IMApplication.getInstance().getUserName());}}protected void setUserHeader(String username, User user) {String headername = null;if (!TextUtils.isEmpty(user.getNick())) {headername = user.getNick();} else {headername = user.getUsername();}if (username.equals(Constant.NEW_FRIENDS_USERNAME)) {user.setHeader("");} else if (Character.isDigit(headername.charAt(0))) {user.setHeader("#");} else {user.setHeader(HanziToPinyin.getInstance().get(headername.substring(0, 1)).get(0).target.substring(0,1).toUpperCase());char header = user.getHeader().toLowerCase().charAt(0);if (header < 'a' || header > 'z') {user.setHeader("#");}}}}

运行的效果:








下面讲AlertDialog和注册的Activity。

2014.11.27

0 0
原创粉丝点击