package com.fanxin.app.fx; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.annotation.SuppressLint; import android.app.ProgressDialog; 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.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONException; import com.alibaba.fastjson.JSONObject; import com.easemob.EMCallBack; import com.easemob.chat.EMChatManager; import com.easemob.chat.EMContactManager; import com.easemob.chat.EMGroupManager; import com.fanxin.app.Constant; import com.fanxin.app.MYApplication; import com.fanxin.app.R; import com.fanxin.app.activity.BaseActivity; import com.fanxin.app.db.UserDao; import com.fanxin.app.domain.User; import com.fanxin.app.fx.others.LoadDataFromServer; import com.fanxin.app.fx.others.LocalUserInfo; import com.fanxin.app.fx.others.LoadDataFromServer.DataCallBack; import com.easemob.exceptions.EaseMobException; import com.easemob.util.HanziToPinyin; /** * 登陆页面 * */ public class LoginActivity extends BaseActivity { private EditText et_usertel; private EditText et_password; private Button btn_login; private Button btn_qtlogin; ProgressDialog dialog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); dialog = new ProgressDialog(LoginActivity.this); et_usertel = (EditText) findViewById(R.id.et_usertel); et_password = (EditText) findViewById(R.id.et_password); btn_login = (Button) findViewById(R.id.btn_login); btn_qtlogin = (Button) findViewById(R.id.btn_qtlogin); // 监听多个输入框 et_usertel.addTextChangedListener(new TextChange()); et_password.addTextChangedListener(new TextChange()); btn_login.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { dialog.setMessage("正在登录..."); dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); dialog.show(); final String password = et_password.getText().toString().trim(); String usertel = et_usertel.getText().toString().trim(); Map<String, String> map = new HashMap<String, String>(); map.put("usertel", usertel); map.put("password", password); LoadDataFromServer task = new LoadDataFromServer( LoginActivity.this, Constant.URL_Login, map); task.getData(new DataCallBack() { @Override public void onDataCallBack(JSONObject data) { if (data == null) { Toast.makeText(LoginActivity.this, "返回数据错误../", Toast.LENGTH_SHORT) .show(); return ; } try { int code = data.getInteger("code"); if (code == 1) { JSONObject json = data.getJSONObject("user"); login(json); } else if (code == 2) { dialog.dismiss(); Toast.makeText(LoginActivity.this, "账号或密码错误...", Toast.LENGTH_SHORT) .show(); } else if (code == 3) { dialog.dismiss(); Toast.makeText(LoginActivity.this, "服务器端注册失败...", Toast.LENGTH_SHORT) .show(); } else { dialog.dismiss(); Toast.makeText(LoginActivity.this, "服务器繁忙请重试...", Toast.LENGTH_SHORT) .show(); } } catch (JSONException e) { dialog.dismiss(); Toast.makeText(LoginActivity.this, "数据解析错误...", Toast.LENGTH_SHORT).show(); e.printStackTrace(); } } }); } }); btn_qtlogin.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(LoginActivity.this, RegisterActivity.class)); } }); } // EditText监听器 class TextChange implements TextWatcher { @Override public void afterTextChanged(Editable arg0) { } @Override public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { } @Override public void onTextChanged(CharSequence cs, int start, int before, int count) { boolean Sign2 = et_usertel.getText().length() > 0; boolean Sign3 = et_password.getText().length() > 0; if (Sign2 & Sign3) { btn_login.setTextColor(0xFFFFFFFF); btn_login.setEnabled(true); } // 在layout文件中,对Button的text属性应预先设置默认值,否则刚打开程序的时候Button是无显示的 else { btn_login.setTextColor(0xFFD0EFC6); btn_login.setEnabled(false); } } } private void login(final JSONObject json) { try { final String nick = json.getString("nick"); final String hxid = json.getString("hxid"); final String password = json.getString("password"); // String fxid = json.getString("fxid"); // String tel = json.getString("tel"); // String sex = json.getString("sex"); // String sign = json.getString("sign"); // String avatar = json.getString("avatar"); // String region = json.getString("region"); // 调用sdk登陆方法登陆聊天服务器 EMChatManager.getInstance().login(hxid, password, new EMCallBack() { @Override public void onSuccess() { // 登陆成功,保存用户名密码 MYApplication.getInstance().setUserName(hxid); MYApplication.getInstance().setPassword(password); runOnUiThread(new Runnable() { public void run() { dialog.setMessage(getString(R.string.list_is_for)); } }); try { // ** 第一次登录或者之前logout后再登录,加载所有本地群和回话 // ** manually load all local groups and // conversations in case we are auto login // 更新当前用户的nickname 此方法的作用是在ios离线推送时能够显示用户nick boolean updatenick = EMChatManager.getInstance() .updateCurrentUserNick(nick); if (!updatenick) { Log.e("LoginActivity", "update current user nick fail"); } EMGroupManager.getInstance().loadAllGroups(); EMChatManager.getInstance().loadAllConversations(); // 处理好友和群组 runOnUiThread(new Runnable() { public void run() { processContactsAndGroups(json); } }); } catch (Exception e) { e.printStackTrace(); // 取好友或者群聊失败,不让进入主页面 runOnUiThread(new Runnable() { public void run() { dialog.dismiss(); MYApplication.getInstance().logout(null); Toast.makeText(getApplicationContext(), R.string.login_failure_failed, Toast.LENGTH_SHORT).show(); } }); return; } } @Override public void onProgress(int progress, String status) { } @Override public void onError(final int code, final String message) { runOnUiThread(new Runnable() { public void run() { dialog.dismiss(); Toast.makeText(getApplicationContext(), getString(R.string.Login_failed) + message, Toast.LENGTH_SHORT).show(); } }); } }); } catch (JSONException e1) { e1.printStackTrace(); } } private void processContactsAndGroups(final JSONObject json) { // demo中简单的处理成每次登陆都去获取好友username,开发者自己根据情况而定 // try { // List<String> usernames = EMContactManager.getInstance() // .getContactUserNames(); // if (usernames != null && usernames.size() > 0) { // String totaluser = usernames.get(0); // for (int i = 1; i < usernames.size(); i++) { // final String split = "66split88"; // totaluser += split + usernames.get(i); // } // totaluser = totaluser // .replace(Constant.NEW_FRIENDS_USERNAME, ""); // totaluser = totaluser.replace(Constant.GROUP_USERNAME, ""); // Log.e("totaluser---->>>>>",totaluser); Map<String, String> map = new HashMap<String, String>(); // map.put("uids", totaluser); map.put("hxid", MYApplication.getInstance().getUserName()); LoadDataFromServer task = new LoadDataFromServer(LoginActivity.this, Constant.URL_FriendList, map); task.getData(new DataCallBack() { @Override public void onDataCallBack(JSONObject data) { try { int code = data.getInteger("code"); if (code == 1000) { JSONArray josnArray = data.getJSONArray("friends"); // 己的信息 saveMyInfo(json); saveFriends(josnArray); } // else if (code == 2) { // dialog.dismiss(); // Toast.makeText(LoginActivity.this, // "获取好友列表失败,请重试...", Toast.LENGTH_SHORT) // .show(); // } else { dialog.dismiss(); Toast.makeText(LoginActivity.this, "服务器繁忙请重试...", Toast.LENGTH_SHORT).show(); } } catch (JSONException e) { dialog.dismiss(); Toast.makeText(LoginActivity.this, "数据解析错误...", Toast.LENGTH_SHORT).show(); e.printStackTrace(); } } }); // } else { // // 己的信息 // saveMyInfo(json); // // saveFriends(null); // } // } catch (EaseMobException e1) { // // TODO Auto-generated catch block // e1.printStackTrace(); // } } /** * 设置hearder属性,方便通讯中对联系人按header分类显示,以及通过右侧ABCD...字母栏快速定位联系人 * * @param username * @param user */ @SuppressLint("DefaultLocale") protected void setUserHearder(String username, User user) { String headerName = null; if (!TextUtils.isEmpty(user.getNick())) { headerName = user.getNick(); } else { headerName = user.getUsername(); } headerName = headerName.trim(); 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("#"); } } } private void saveMyInfo(JSONObject json) { try { String hxid = json.getString("hxid"); String fxid = json.getString("fxid"); String nick = json.getString("nick"); String avatar = json.getString("avatar"); String password = json.getString("password"); String sex = json.getString("sex"); String region = json.getString("region"); String sign = json.getString("sign"); String tel = json.getString("tel"); String money = json.getString("money"); LocalUserInfo.getInstance(LoginActivity.this).setUserInfo( "password", password); LocalUserInfo.getInstance(LoginActivity.this).setUserInfo("hxid", hxid); LocalUserInfo.getInstance(LoginActivity.this).setUserInfo("fxid", fxid); LocalUserInfo.getInstance(LoginActivity.this).setUserInfo("nick", nick); LocalUserInfo.getInstance(LoginActivity.this).setUserInfo("avatar", avatar); LocalUserInfo.getInstance(LoginActivity.this).setUserInfo("sex", sex); LocalUserInfo.getInstance(LoginActivity.this).setUserInfo("region", region); LocalUserInfo.getInstance(LoginActivity.this).setUserInfo("sign", sign); LocalUserInfo.getInstance(LoginActivity.this).setUserInfo("tel", tel); LocalUserInfo.getInstance(LoginActivity.this).setUserInfo("money", money); } catch (JSONException e) { e.printStackTrace(); dialog.dismiss(); return; } } private void saveFriends(JSONArray josnArray) { Map<String, User> map = new HashMap<String, User>(); if (josnArray != null) { for (int i = 0; i < josnArray.size(); i++) { JSONObject json = josnArray.getJSONObject(i); try { String hxid = json.getString("hxid"); String fxid = json.getString("fxid"); String nick = json.getString("nick"); String avatar = json.getString("avatar"); String sex = json.getString("sex"); String region = json.getString("region"); String sign = json.getString("sign"); String tel = json.getString("tel"); User user = new User(); user.setFxid(fxid); user.setUsername(hxid); user.setBeizhu(""); user.setNick(nick); user.setRegion(region); user.setSex(sex); user.setTel(tel); user.setSign(sign); user.setAvatar(avatar); setUserHearder(hxid, user); map.put(hxid, user); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } // 添加user"申请与通知" User newFriends = new User(); newFriends.setUsername(Constant.NEW_FRIENDS_USERNAME); String strChat = getResources().getString( R.string.Application_and_notify); newFriends.setNick(strChat); newFriends.setBeizhu(""); newFriends.setFxid(""); newFriends.setHeader(""); newFriends.setRegion(""); newFriends.setSex(""); newFriends.setTel(""); newFriends.setSign(""); newFriends.setAvatar(""); map.put(Constant.NEW_FRIENDS_USERNAME, newFriends); // 添加"群聊" User groupUser = new User(); String strGroup = getResources().getString(R.string.group_chat); groupUser.setUsername(Constant.GROUP_USERNAME); groupUser.setNick(strGroup); groupUser.setHeader(""); groupUser.setNick(strChat); groupUser.setBeizhu(""); groupUser.setFxid(""); groupUser.setHeader(""); groupUser.setRegion(""); groupUser.setSex(""); groupUser.setTel(""); groupUser.setSign(""); groupUser.setAvatar(""); map.put(Constant.GROUP_USERNAME, groupUser); // 存入内存 MYApplication.getInstance().setContactList(map); // 存入db UserDao dao = new UserDao(LoginActivity.this); List<User> users = new ArrayList<User>(map.values()); dao.saveContactList(users); // 获取黑名单列表 // try { // List<String> blackList = EMContactManager.getInstance() // .getBlackListUsernamesFromServer(); // EMContactManager.getInstance().saveBlackList(blackList); // 获取群聊列表(群聊里只有groupid和groupname等简单信息,不包含members),sdk会把群组存入到内存和db中 getGroups() ; // addContact("11223354"); if (!LoginActivity.this.isFinishing()) dialog.dismiss(); // 进入主页面 startActivity(new Intent(LoginActivity.this, MainActivity.class)); finish(); } private void getGroups() { new Thread(new Runnable() { @Override public void run() { try { EMGroupManager.getInstance().getGroupsFromServer(); } catch (EaseMobException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }).start(); } /** * 添加contact * * @param view */ @SuppressLint("ShowToast") public void addContact(final String glufine_id) { // 11223354 if (glufine_id == null || glufine_id.equals("")) { return; } if (MYApplication.getInstance().getUserName().equals(glufine_id)) { return; } if (MYApplication.getInstance().getContactList() .containsKey(glufine_id)) { return; } new Thread(new Runnable() { public void run() { try { // 在reason封装请求者的昵称/头像/时间等信息,在通知中显示 String name = LocalUserInfo.getInstance(LoginActivity.this) .getUserInfo("nick"); String avatar = LocalUserInfo.getInstance( LoginActivity.this).getUserInfo("avatar"); long time = System.currentTimeMillis(); String reason = name + "66split88" + avatar + "66split88" + String.valueOf(time) + "66split88" + "加你好友"; EMContactManager.getInstance().addContact(glufine_id, reason); } catch (final Exception e) { } } }).start(); } }