package cn.edu.njupt.allgo.logicImpl; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.apache.http.Header; import org.json.JSONException; import org.json.JSONObject; import com.alibaba.fastjson.JSON; import com.lidroid.xutils.DbUtils; import com.lidroid.xutils.HttpUtils; import com.lidroid.xutils.db.sqlite.Selector; import com.lidroid.xutils.exception.DbException; import com.lidroid.xutils.exception.HttpException; import com.lidroid.xutils.http.RequestParams; import com.lidroid.xutils.http.ResponseInfo; import com.lidroid.xutils.http.ResponseStream; import com.lidroid.xutils.http.callback.RequestCallBack; import com.lidroid.xutils.http.client.HttpRequest; import com.lidroid.xutils.util.LogUtils; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.SharedPreferences; import android.os.AsyncTask; import android.util.Log; import android.widget.EditText; import android.widget.Toast; import cn.edu.njupt.allgo.activity.EventPageACTIVITY; import cn.edu.njupt.allgo.application.MyDeclare; import cn.edu.njupt.allgo.logic.LoginLogic; import cn.edu.njupt.allgo.logic.RefreshInterFace; import cn.edu.njupt.allgo.util.ArrayListUtil; import cn.edu.njupt.allgo.util.MD5; import cn.edu.njupt.allgo.util.NetUtil; import cn.edu.njupt.allgo.util.NetUtil.NetCallBack; import cn.edu.njupt.allgo.vo.CommonEventVo; import cn.edu.njupt.allgo.vo.EventVo; import cn.edu.njupt.allgo.vo.FriendEventVo; import cn.edu.njupt.allgo.vo.MyEventVo; import cn.edu.njupt.allgo.vo.PastEventVo; import cn.edu.njupt.allgo.vo.UnreadVo; import cn.edu.njupt.allgo.vo.UserDataVo; public class LoginLogicImpl implements LoginLogic { private Context context ; private RefreshInterFace refresh ; private UserDataVo userData = null; private HttpUtils http = null; private boolean flag = true; private MyDeclare declare; public LoginLogicImpl (Context context , RefreshInterFace refresh) { this.context = context ; this.refresh = refresh ; declare =(MyDeclare)context.getApplicationContext(); } /** * 登录 * @param context this * @param name * @param password * @return */ @Override public void login(String name , String password) { loginNet(name , password); } //联网登录 private void loginNet(String name, String password) { NetUtil netUtil = new NetUtil("login", refresh, context, new NetCallBack(){ @Override public void getResult(JSONObject jsonObject) { try { if(jsonObject.getString("response").equals("login")){ userData = JSON.parseObject(jsonObject.getString("userdata") , UserDataVo.class); String session = jsonObject.getString("SessionId"); SharedPreferences sharedPref = context.getSharedPreferences("appdata",Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPref.edit(); editor.putString("SessionId", session); editor.commit(); loginSave(); } } catch (JSONException e) { e.printStackTrace(); } } }); netUtil.add("uname", name); netUtil.add("upassword", MD5.digest(password)); http = netUtil.getHttp(); netUtil.post(); } public void loginSave(){ if(userData != null){ isFirstRun(userData); //登录成功将用户数据存入SharedPreferences SharedPreferences sharedPref = context.getSharedPreferences("userdata",Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPref.edit(); Log.i("DB", "UID==>" + userData.getUid()); editor.putInt("uid", userData.getUid()); editor.putString("uname", userData.getUname()); editor.putString("upassword", userData.getUpassword()); editor.putString("uemail", userData.getUemail()); editor.putInt("usex", userData.getUsex()); editor.putString("uhead", userData.getUhead()); editor.putString("ubirthday", userData.getUbirthday()); editor.putString("uregdate", userData.getUregdate()); editor.putString("uaddress", userData.getUaddress()); editor.putString("usatement", userData.getUsatement()); editor.commit(); refresh.refresh(true, 1); } } /** * 如果是某个用第一次运行,则初始化数据库,模拟些数据出来 */ private void isFirstRun(UserDataVo userData) { if(getFlag(userData)){ initCommonDateBase(userData); } } //SharedPreferences里的值为true,则是运行过的 private boolean getFlag(UserDataVo userData) { boolean flag = false ; SharedPreferences sharedPref = this.context.getSharedPreferences("appdata",Context.MODE_PRIVATE); if(!sharedPref.getBoolean(userData.getUid() + "", false)){ SharedPreferences.Editor editor = sharedPref.edit(); editor.putBoolean(userData.getUid() + "", true) ; editor.commit(); flag = true ; } return flag; } //模拟生成commonevent数据 private void initCommonDateBase(UserDataVo userData) { /*try{ DbUtils db = DbUtils.create(context,userData.getUid() + ".db"); db.configAllowTransaction(true); db.configDebug(true); db.save(new CommonEventVo(11002617,"去栖霞山爬山",123456,"千军万马1", "Mon Feb 15 08:00:00 GMT+08:00 2014","","去栖霞山爬山","栖霞山", "江苏省 南京市 栖霞区","Mon Feb 13 08:00:00 GMT+08:00 2013","旅游",0, 0,0)); db.save(new CommonEventVo(11002618,"去栖霞山爬山",123458,"千军万马2", "Mon Feb 15 08:00:00 GMT+08:00 2014","","去栖霞山爬山","栖霞山", "江苏省 南京市 栖霞区","Mon Feb 13 08:00:00 GMT+08:00 2013","旅游",0, 0,0)); db.save(new FriendEventVo(11002620,"去栖霞山爬山",123459,"千军万马4", "Mon Feb 15 08:00:00 GMT+08:00 2014","","去栖霞山爬山","栖霞山", "江苏省 南京市 栖霞区","Mon Feb 13 08:00:00 GMT+08:00 2013","旅游",0, 0,0)); db.save(new MyEventVo(11002620,"去栖霞山爬山",123459,"千军万马4", "Mon Feb 15 08:00:00 GMT+08:00 2014","","去栖霞山爬山","栖霞山", "江苏省 南京市 栖霞区","Mon Feb 13 08:00:00 GMT+08:00 2013","旅游",0, 0,0)); db.save(new PastEventVo(11002620,"去栖霞山爬山",123459,"千军万马4", "Mon Feb 15 08:00:00 GMT+08:00 2014","","去栖霞山爬山","栖霞山", "江苏省 南京市 栖霞区","Mon Feb 13 08:00:00 GMT+08:00 2013","旅游",0, 0,0)); db.save(new UnreadVo(554322440, 123456, 06, 223232323, 03, "完美猫:好的好的!", "Mon Feb 13 8:45:00 GMT+08:00 2013")); }catch(DbException e){ Log.e("DB", "error :" + e.getMessage() + "\n"); }*/ } /** * 取消登录 * @return */ @Override public void cancelLogin() { if(http != null){ flag = false ; http.getHttpClient().getConnectionManager().shutdown(); refresh.refresh("取消登录", -1); } } /** * 检查是否已经登录 * @return */ @Override public void isLogin() { new AsyncTask<Void, Void, Void>() { @Override protected Void doInBackground(Void... params) { try { Thread.sleep(1500); } catch (InterruptedException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } SharedPreferences sharedPref = context.getSharedPreferences("userdata",Context.MODE_PRIVATE); if(sharedPref.getInt("uid", -1) != -1){ refresh.refresh(null, 1); //已经登录 }else{ refresh.refresh(null, 2); } SharedPreferences shared = context.getSharedPreferences("appdata",Context.MODE_PRIVATE); String host_url = shared.getString("host_url", "http://10.0.2.2:8080/ALLGO_server/"); MyDeclare declare =(MyDeclare)context.getApplicationContext(); declare.setHost_url(host_url); return null; } }.execute(); } /** * 下线 */ @Override public void logOff() { loginOffNet(); } public void logOffDB(){ SharedPreferences sharedPref1 = context.getSharedPreferences("userdata",Context.MODE_PRIVATE); SharedPreferences.Editor editor1 = sharedPref1.edit(); editor1.clear() ; editor1.commit(); SharedPreferences sharedPref2 = context.getSharedPreferences("appdata",Context.MODE_PRIVATE); SharedPreferences.Editor editor2 = sharedPref2.edit(); editor2.putString("SessionId", ""); editor1.commit(); } private void loginOffNet() { NetUtil netUtil = new NetUtil("logout", refresh, context, new NetCallBack(){ @Override public void getResult(JSONObject jsonObject) { try { if(jsonObject.getString("response").equals("logout")){ refresh.refresh(null, 1); }else{ refresh.refresh("联网出错", -1); } } catch (JSONException e) { e.printStackTrace(); } } }); SharedPreferences sharedPref = context.getSharedPreferences("userdata",Context.MODE_PRIVATE); int uid = sharedPref.getInt("uid", -1) ; String uname = sharedPref.getString("uname", null) ; String upassword = sharedPref.getString("upassword", null) ; netUtil.add("uid", uid + ""); netUtil.add("uname", uname); netUtil.add("upassword", upassword); netUtil.post(); } /** * 设置服务器地址 */ @Override public void setURL() { MyDeclare declare =(MyDeclare)context.getApplicationContext(); final EditText edit = new EditText(context); edit.setText(declare.getHost_url()); new AlertDialog.Builder(context) .setTitle("修改服务器地址") .setView(edit) .setPositiveButton("确定", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { //EventPageACTIVITY.this.sendAdd(edit.getText().toString()); SharedPreferences sharedPref = context.getSharedPreferences("appdata",Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPref.edit(); MyDeclare declare =(MyDeclare)context.getApplicationContext(); declare.setHost_url(edit.getText().toString()); editor.putString("host_url", edit.getText().toString()); editor.commit(); } }) .setNegativeButton("取消", null) .show(); } @Override public void logOffLocal() { refresh.refresh("已下线", -1); } }