package com.kaixin.android.activity;
import org.json.JSONException;
import org.json.JSONObject;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler.Callback;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.easemob.EMCallBack;
import com.easemob.chat.EMChatManager;
import com.kaixin.android.KXActivity;
import com.kaixin.android.R;
import com.kaixin.android.common.Constants;
import com.kaixin.android.result.UserResult;
import com.kaixin.android.utils.CallService;
import com.kaixin.android.utils.Encrypter;
import com.kaixin.android.utils.MessageUtil;
import com.kaixin.android.utils.SoapToObject;
import com.kaixin.android.utils.StorageUtil;
import com.kaixin.android.utils.StringUtil;
import com.kaixin.android.utils.Utils;
import com.tencent.connect.UserInfo;
import com.tencent.connect.auth.QQToken;
import com.tencent.tauth.IUiListener;
import com.tencent.tauth.Tencent;
import com.tencent.tauth.UiError;
/**
* 登录界面
*
* @author gyz
*
*/
public class LoginActivity extends KXActivity {
/**
* 登录按钮
*/
private Button mLogin;
public static UserResult mUser;
private EditText metAccount;
private EditText metPassword;
private TextView mtxtRegister;
private TextView mQQLogin;
private Tencent mTencent;
private ProgressDialog dialog;
//短信注册,随机产生头像
private static final String[] AVATARS = {
"http://tupian.qqjay.com/u/2011/0729/e755c434c91fed9f6f73152731788cb3.jpg",
"http://99touxiang.com/public/upload/nvsheng/125/27-011820_433.jpg",
"http://img1.touxiang.cn/uploads/allimg/111029/2330264224-36.png",
"http://img1.2345.com/duoteimg/qqTxImg/2012/04/09/13339485237265.jpg",
"http://diy.qqjay.com/u/files/2012/0523/f466c38e1c6c99ee2d6cd7746207a97a.jpg",
"http://img1.touxiang.cn/uploads/20121224/24-054837_708.jpg",
"http://img1.touxiang.cn/uploads/20121212/12-060125_658.jpg",
"http://img1.touxiang.cn/uploads/20130608/08-054059_703.jpg",
"http://diy.qqjay.com/u2/2013/0422/fadc08459b1ef5fc1ea6b5b8d22e44b4.jpg",
"http://img1.2345.com/duoteimg/qqTxImg/2012/04/09/13339510584349.jpg",
"http://img1.touxiang.cn/uploads/20130515/15-080722_514.jpg",
"http://diy.qqjay.com/u2/2013/0401/4355c29b30d295b26da6f242a65bcaad.jpg"
};
// // 填写从短信SDK应用后台注册得到的APPKEY
// private static String APPKEY = "27512ef42665";
// // 填写从短信SDK应用后台注册得到的APPSECRET
// private static String APPSECRET = "e762fcd4ffbfd0e9646427644afde078";
// private NewMessageBroadcastReceiver msgReceiver;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login_activity);
findViewById();
setListener();
// initSDK();
}
/*private void initSDK() {
// 初始化短信SDK
SMSSDK.initSDK(this, APPKEY, APPSECRET);
final Handler handler = new Handler(this);
EventHandler eventHandler = new EventHandler() {
public void afterEvent(int event, int result, Object data) {
Message msg = new Message();
msg.arg1 = event;
msg.arg2 = result;
msg.obj = data;
handler.sendMessage(msg);
}
};
//注册回调监听接口
SMSSDK.registerEventHandler(eventHandler);
}*/
/**
* 绑定界面UI
*/
private void findViewById() {
mLogin = (Button) findViewById(R.id.login_activity_login);
mQQLogin = (TextView) findViewById(R.id.qqlogin);
metAccount = (EditText) findViewById(R.id.etAccount);
metPassword = (EditText) findViewById(R.id.etPassword);
mtxtRegister = (TextView) findViewById(R.id.txt_register);
metAccount.setText(StorageUtil.getString(this, "username"));
metPassword.setText(StorageUtil.getString(this, "password"));
if(!StringUtil.isNull(StorageUtil.getString(LoginActivity.this, "isLogin"))){
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
startActivity(intent);
finish();
}
}
/**
* UI事件监听
*/
private void setListener() {
// 登陆QQ监听
mQQLogin.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mTencent = Tencent.createInstance(Constants.TENCENT_APP_ID,LoginActivity.this);
mTencent.login(LoginActivity.this,Constants.TENCENT_SCOPE, new BaseUiListener());
// Tencent.createInstance(mAppid, LoginActivity.this);
}
});
// 登录按钮监听
mLogin.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if(StringUtil.isNull(metAccount.getText().toString()) || StringUtil.isNull(metPassword.getText().toString())){
MessageUtil.showMsg(LoginActivity.this, "账号或者密码不能为空!");
return;
}
String serviceUrl = Constants.getUrl() + "/services/kxw_login?wsdl";
// 定义调用的WebService方法名
String methodName = "login";
// 第1步:创建SoapObject对象,并指定WebService的命名空间和调用的方法名
SoapObject request = new SoapObject("http://service", methodName);
// 第2步:设置WebService方法的参数
request.addProperty("username", metAccount.getText().toString());
String passwordMD5 = Encrypter.md5(metPassword.getText()
.toString());
request.addProperty("password", passwordMD5);
// 设置MyObject中的username和passwords
CallService.setUsername(metAccount.getText().toString());
CallService.setPasswordMD5(passwordMD5);
// 第3步:创建SoapSerializationEnvelope对象,并指定WebService的版本
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
// 设置bodyOut属性
envelope.bodyOut = request;
// 第4步:创建HttpTransportSE对象,并指定WSDL文档的URL
HttpTransportSE ht = new HttpTransportSE(serviceUrl);
try
{
// 第5步:调用WebService
ht.call(null, envelope);
if (envelope.getResponse() != null)
{
// 第6步:使用getResponse方法获得WebService方法的返回结果
SoapObject soapObject = (SoapObject) envelope.getResponse();
// 通过getProperty方法获得Product对象的属性值
mUser = (UserResult) SoapToObject.to(UserResult.class, soapObject);
mUser.setPasswordMD5(Encrypter.md5(metPassword.getText()
.toString()));
StorageUtil.saveString(LoginActivity.this, "username", metAccount.getText()
.toString());
StorageUtil.saveString(LoginActivity.this, "nickname", mUser.getName());
StorageUtil.saveString(LoginActivity.this, "userid", String.valueOf(mUser.getId()));
StorageUtil.saveString(LoginActivity.this, "password", metPassword.getText()
.toString());
StorageUtil.saveString(LoginActivity.this, "isLogin", "true");
String isFirstLogin = StorageUtil.getString(LoginActivity.this, "isFirstLogin");
String isLogin = StorageUtil.getString(LoginActivity.this, "isLogin");
toMain(isFirstLogin, isLogin);
}
else
{
MessageUtil.showMsg(LoginActivity.this, "登录失败.");
}
}
catch (Exception e)
{
MessageUtil.showMsg(LoginActivity.this, e.getMessage());
}
}
});
mtxtRegister.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(LoginActivity.this, RegActivity.class);//RegActivity.class
startActivity(intent);
//打开注册页面
/*SmsRegisterActivity registerPage = new SmsRegisterActivity();
registerPage.setRegisterCallback(new EventHandler() {
public void afterEvent(int event, int result, Object data) {
// 解析注册结果
if (result == SMSSDK.RESULT_COMPLETE) {
@SuppressWarnings("unchecked")
HashMap<String,Object> phoneMap = (HashMap<String, Object>) data;
String country = (String) phoneMap.get("country");
String phone = (String) phoneMap.get("phone");
// 提交用户信息
registerUser(country, phone);
}
}
});
registerPage.show(LoginActivity.this);*/
}
});
}
private void toMain(String isFirstLogin, String isLogin) {
if(!StringUtil.isNull(isLogin)){
EMChatManager.getInstance().login(StorageUtil.getString(LoginActivity.this, "username"), Encrypter.md5(StorageUtil.getString(LoginActivity.this, "password")), new EMCallBack() {
@Override
public void onError(int arg0, final String errorMsg) {
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(LoginActivity.this, "登录聊天服务器失败:" + errorMsg, Toast.LENGTH_SHORT).show();
}
});
}
@Override
public void onProgress(int arg0, String arg1) {
}
@Override
public void onSuccess() {
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(LoginActivity.this, "登录成功", Toast.LENGTH_SHORT).show();
}
});
}
});
}
if(dialog != null && dialog.isShowing()){
dialog.dismiss();
}
if(StringUtil.isNull(isFirstLogin)){
Intent intent = new Intent(LoginActivity.this, GuideActivity.class);
startActivity(intent);
finish();
}else{
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
startActivity(intent);
finish();
}
}
private class BaseUiListener implements IUiListener {
private String nickname;
private int gender;
private String avatar;
@Override
public void onComplete(Object response) {
runOnUiThread(new Runnable() {
public void run() {
dialog = new ProgressDialog(LoginActivity.this);
dialog.setMessage("登陆中...");
dialog.show();
}
});
Toast.makeText(getApplicationContext(), "QQ登陆成功", 0).show();
JSONObject responseJsonobject = (JSONObject) response;
final String openid = responseJsonobject.optString("openid");
// final String access_token = responseJsonobject.optString("access_token");
// final String expires_in = responseJsonobject.optString("expires_in");
QQToken qqToken = mTencent.getQQToken();
UserInfo info = new UserInfo(getApplicationContext(), qqToken);
info.getUserInfo(new IUiListener() {
@Override
public void onError(UiError arg0) {
}
@Override
public void onComplete(Object response) {
JSONObject jsonObject = (JSONObject) response;
nickname = jsonObject.optString("nickname");
if(jsonObject.has("figureurl")){
avatar = jsonObject.optString("figureurl_qq_2");
}
gender = Utils.getGenderNum(jsonObject.optString("gender"));
StorageUtil.saveString(LoginActivity.this, "username", openid);
StorageUtil.saveString(LoginActivity.this, "nickname", nickname);
StorageUtil.saveString(LoginActivity.this, "password", "123456");
StorageUtil.saveString(LoginActivity.this, "isLogin", "true");
reg(openid, nickname, avatar, String.valueOf(gender));
}
@Override
public void onCancel() {
}
});
}
@Override
public void onError(UiError e) {
}
@Override
public void onCancel() {
}
}
public void reg(String openid, String nickname, String avatar, String gender) {
String result = CallService.register(openid, Encrypter.md5("123456"), nickname, avatar, gender);
System.out.println(result+"===================result");
try {
JSONObject json = new JSONObject(result);
if(json.getBoolean("success")){
Toast.makeText(this, "注册成功!", 1).show();
try {
//调用sdk注册方法
EMChatManager.getInstance().createAccountOnServer(openid, Encrypter.md5("123456"));
} catch (final Exception e) {
runOnUiThread(new Runnable() {
public void run() {
if(e!=null&&e.getMessage()!=null)
{
String errorMsg=e.getMessage();
if(errorMsg.indexOf("EMNetworkUnconnectedException")!=-1)
{
Toast.makeText(getApplicationContext(), "网络异常,请检查网络!", 0).show();
}else if(errorMsg.indexOf("conflict")!=-1)
{
//Toast.makeText(getApplicationContext(), "用户已存在!", 0).show();
}else{
Toast.makeText(getApplicationContext(), "注册失败: " + e.getMessage(), 1).show();
}
}else{
Toast.makeText(getApplicationContext(), "注册失败: 未知异常", 1).show();
}
}
});
}
}
String isFirstLogin = StorageUtil.getString(LoginActivity.this, "isFirstLogin");
String isLogin = StorageUtil.getString(LoginActivity.this, "isLogin");
toMain(isFirstLogin, isLogin);
} catch (JSONException e) {
e.printStackTrace();
}
}
public void onBackPressed() {
finish();
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(0);
}
}