最近公司让写个android注册 登录 修改帐号密码 添加资料 给新注册用户充值DEMO 现在功能都已经OK 目前只剩下一些小细节 现在我就把源码发布出来 给一些需要的人参考,在这里重点只讲怎么去请求服务器 和服务器返回的一些什么东西给我们 我们如何拿到 如何处理最后的时候我会把整个项目打包
有图有真相:
首先我们先看一下请求服务器的类 如何写的 可结合我上一篇:
http://www.eoeandroid.com/thread-212252-1-1.html
这里就完善上一篇的内容:
我们首先看注册那边返回的JSON都是什么内容吧(一会我会讲到如何抓到result>1的错误信息,然后返回给activity显示出来) 一般你们公司都会有个后台给你们写个接口文档扔给你 让你去做的
我们在注册页面去请求服务器:
在我的工程:Register类
传的参数里面 第一个就是context 第二个就是一个注册的参数(你们后台都会有自己弄一个参数来区分的),第三个参数就是你的名字 第4个参数就是你的密码 第五个参数其实就是一个渠道的意思(从那个渠道过来注册的,比如你从googlePlay注册的 这里随便定义一个参数 让你们的老大知道这个从googlePlay下载注册的,现在产品都这样搞的)
如果注册接口成功返回true 那么flag就会是true(默认是false嘛) 就去执行Intent,然后putExtra 把需要的东西传值到登录界面
登录界面会做什么事呢? 接着上面的问题 看下面的代码:
登录界面就会用getStringExtra方法把刚刚从注册传过来的值 这里是根据Key,value 我们只要得到这个key("name")就OK了。
然后我们在用setText 显示在editText上!
然后我们在点击登录的时候看代码 如何把刚刚从注册传过来的值在去传到登录接口 其实在这里很简单 在赋值给的string就OK了 赋值好后然后在把赋值的值传到登录接口 看例子:
登录后 我们就会看到一个登录成功的页面,下面有4个按钮 修改帐号,添加资料,从设密码
那么修改帐号的流程 还是跟上面登录注册一样 把所有的值用putExtra方法传过来 然后在修改帐号页面getStringExtra在得到("name",passwor)等 ,在从新声明一个string类型 在赋值 在去请求 修改帐号密码接口
添加资料也就是去请求地址 然后里面需要传什么东西 就传什么过去。
从设置也是和上面的流程 putExtra-----getStringExtra("name",passwor)等在从新声明一个string类型 在赋值 在去请求
其实注册 登录 修改帐号密码 和添加资料 都是很简单的 无非就是putExtra getStringExtra 声明 赋值 请求 返回信息 显示
备注:
都是本人原创 只是我提前在EOE论坛发布了。
有图有真相:
首先我们先看一下请求服务器的类 如何写的 可结合我上一篇:
http://www.eoeandroid.com/thread-212252-1-1.html
这里就完善上一篇的内容:
我们首先看注册那边返回的JSON都是什么内容吧(一会我会讲到如何抓到result>1的错误信息,然后返回给activity显示出来) 一般你们公司都会有个后台给你们写个接口文档扔给你 让你去做的
- { “result”: 1, “uid”:22771,”msg”:””}
- result=1 注册成功, uid为玩家uid, msg为空
- result>1时注册失败, 此时返回的 uid=0
- result=2: msg:用户名格式不对
- result=3: msg:此用户名已经被注册
- result=4: msg:密码格式不对(长度不是6-16位或者包含了其他字符,比如中文标点之类)
- result=5: msg:广告来源为空 from 的值不允许为空
- result=6: msg:系统维护,此时不允许注册
- result>6 时为其他错误, msg会返回错误的具体原因
我们在注册页面去请求服务器:
在我的工程:Register类
- boolean flag ;//条件成立跳转到登陆界面
- /** 请求服务器 */
- if (userName != null || password != null || from != null) {
- flag = UserDataServiceHelper.Register(context, "reg", userName, password, from);
- if(flag){
- Intent intent = new Intent();
- intent.putExtra("name", userName);
- intent.putExtra("pw", password);
- intent.putExtra("fm",from);
- intent.setClass(Register.this, Login.class);
- startActivity(intent);
- }else {
- Log.i("TAG", "不成立");
- }
- Log.i("TAG", "请求服务器" + userName + password + from);
- }
传的参数里面 第一个就是context 第二个就是一个注册的参数(你们后台都会有自己弄一个参数来区分的),第三个参数就是你的名字 第4个参数就是你的密码 第五个参数其实就是一个渠道的意思(从那个渠道过来注册的,比如你从googlePlay注册的 这里随便定义一个参数 让你们的老大知道这个从googlePlay下载注册的,现在产品都这样搞的)
如果注册接口成功返回true 那么flag就会是true(默认是false嘛) 就去执行Intent,然后putExtra 把需要的东西传值到登录界面
登录界面会做什么事呢? 接着上面的问题 看下面的代码:
- /** 初始化注册VIEW组件 */
- private void findViewById() {
- 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);
- view_loginRegister = (Button) findViewById(R.id.loginRegister);
- view_fast = (TextView) findViewById(R.id.fast);
- /** 注册成功后传过来用户名和密码,显示在登录界面 */
- if (!flag) {
- Intent intent = getIntent();
- userName = intent.getStringExtra("name");
- password = intent.getStringExtra("pw");
- from = intent.getStringExtra("fm");
- view_rememberMe.setChecked(false);//小BUG
- view_userName.setText(userName);
- view_password.setText(password);
- }
- }
登录界面就会用getStringExtra方法把刚刚从注册传过来的值 这里是根据Key,value 我们只要得到这个key("name")就OK了。
然后我们在用setText 显示在editText上!
- view_userName.setText(userName);
- view_password.setText(password);
然后我们在点击登录的时候看代码 如何把刚刚从注册传过来的值在去传到登录接口 其实在这里很简单 在赋值给的string就OK了 赋值好后然后在把赋值的值传到登录接口 看例子:
- /** 登录Button Listener */
- private OnClickListener submitListener = new OnClickListener() {
- @Override
- public void onClick(View v) {
- Log.i("TAG", "submitListener");
- proDialog = ProgressDialog.show(Login.this, "连接中..",
- "连接中..请稍后....", true, true);
- // 开启一个线程进行登录验证,主要是用户失败成功可以直接通过startAcitivity(Intent)转向
- Thread loginThread = new Thread(new LoginFailureHandler());
- loginThread.start();// 开启
- }
- };
- // 另起一个线程登录
- class LoginFailureHandler implements Runnable {
- @Override
- public void run() {
- userName = view_userName.getText().toString();
- Log.i("TAG", "userName LoginFailureHandler" + userName);
- password = view_password.getText().toString();
- Log.i("TAG", "password LoginFailureHandler" + password);
- /** 请求服务器 */
- if (userName != null || password != null) {
- boolean loginState = UserDataServiceHelper.logins(context, "login", userName,
- password, from);
- Log.i("TAG", "登录返回条件" + loginState);
- // 登录成功
- if (loginState) {
- String LoginUerId = UserDataService.LoginUid;
- // 需要传输数据到登陆后的界面,
- Intent intent = new Intent();
- intent.setClass(Login.this, IndexPage.class);
- Bundle bundle = new Bundle();
- bundle.putString("LOGIN_USERNAME", userName);
- bundle.putString("LOGIN_PASSWORD", password);
- bundle.putString("LOGIN_ID", LoginUerId);
- intent.putExtras(bundle);
- // 转向登陆后的页面
- startActivity(intent);
- // /** 得到请求服务器返回码 */
- String loginStateInt = UserDataService.results;
- int Less = Integer.valueOf(loginStateInt); // 转换成整形
- Log.i("TAG", "登录后的返回码:" + Less);
- if (Less == 1) {
- StatusCode = true;
- }
- // 登录成功记住帐号密码
- if (StatusCode) {
- if (isRememberMe()) {
- saveSharePreferences(true, true);
- } else {
- saveSharePreferences(true, false);
- }
- } else {
- // 如果不是网络错误
- if (!isNetError) {
- clearSharePassword();
- clearShareName();
- }
- }
- if (!view_rememberMe.isChecked()) {
- clearSharePassword();
- clearShareName();
- }
- proDialog.dismiss();
- } else {
- // 通过调用handler来通知UI主线程更新UI,
- Log.i("TAG", "连接失败");
- Message message = new Message();
- Bundle bundle = new Bundle();
- bundle.putBoolean("isNetError", isNetError);
- message.setData(bundle);
- loginHandler.sendMessage(message);
- }
- }
- }
- }
登录后 我们就会看到一个登录成功的页面,下面有4个按钮 修改帐号,添加资料,从设密码
那么修改帐号的流程 还是跟上面登录注册一样 把所有的值用putExtra方法传过来 然后在修改帐号页面getStringExtra在得到("name",passwor)等 ,在从新声明一个string类型 在赋值 在去请求 修改帐号密码接口
添加资料也就是去请求地址 然后里面需要传什么东西 就传什么过去。
从设置也是和上面的流程 putExtra-----getStringExtra("name",passwor)等在从新声明一个string类型 在赋值 在去请求
其实注册 登录 修改帐号密码 和添加资料 都是很简单的 无非就是putExtra getStringExtra 声明 赋值 请求 返回信息 显示
备注:
附件里面我把接口那部分已经删掉了 你们可以看上面我写的请求服务器的类 根据自己的业务需求来添加和删除 请求服务器类写的一个不好的地方就是 每个方法都加了static 呵呵 这个原因主要是 我写了一个方法 然后剩下的接口我就复制上面的 然后改改。
- public class UserDataServiceHelper {
- /** 时间戳 */
- static long serial = new Date().getTime();
- /** KEY */
- static String key = "后台人员会给你个密钥";
- /** 网站地址 */
- private static final String HOST_IP = "你的请求地址";
- /** 请求服务器 S1,S2,S3等 */
- static String server = "s1";
- /** 返回码 1=成功 */
- public static String results = null;
- /** 登录UID */
- public static String LoginUid = null;
- /** 注册UID */
- public static String RegisterUid = null;
- /** 快速注册根据返回得到用户名 */
- public static String FastUserName = null;
- /** 快速注册根据返回得到密码 */
- public static String FastPassWord = null;
- /** 快速注册根据返回UID */
- public static String Uid = null;
- /** 充值请求地址*/
- private static final String HOST_IP_CREDIT = "你的充值请求地址";
- // 注册
- public static boolean Register(Context context, String action, String username,
- String password, String from) {
- Log.i("TAG", "得到的" + context + action + username + password + from);
- try {
- HttpClient httpClient = new DefaultHttpClient();
- // 请求超时
- httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 5000);
- // 读取超时
- httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 5000);
- StringBuilder uri = new StringBuilder();
- uri.append(HOST_IP + "XXXXXX" + "?" + "action=" + action);
- uri.append("&username=");
- uri.append(username);
- uri.append("&password=");
- uri.append(password);
- uri.append("&from=");
- uri.append(from);
- uri.append("&server=");
- uri.append(server);
- uri.append("&apitime=");
- uri.append(serial);
- uri.append("&key=");
- uri.append(getMD5Str(serial + key));
- Log.i("TAG", "请求地址:" + uri.toString());
- HttpPost httpPost = new HttpPost(uri.toString());
- HttpResponse httpResponse = httpClient.execute(httpPost);
- String jsonforString = null;
- String result = null;
- String result2 = null;
- String result3 = null;
- String result4 = null;
- String result5 = null;
- String result6 = null;
- String result7 = null;
- // 返回json报文
- if (httpResponse.getStatusLine().getStatusCode() == 200) {
- jsonforString = EntityUtils.toString(httpResponse.getEntity());
- JSONObject jsonObject = new JSONObject(jsonforString);
- Log.i("TAG", "JSONObject对象=" + jsonforString);
- result = jsonObject.getString("result");
- result2 = jsonObject.getString("msg");
- Log.i("TAG", "result2:返回的错误信息"+result2);
- Log.i("TAG", "成功还是失败返回" + result);
- if (httpClient != null) {
- httpClient.getConnectionManager().shutdown();
- }
- if (result.equalsIgnoreCase("1")) {
- return true;
- } else {
- return false;
- }
- }
- } catch (ConnectException e) {
- Toast.makeText(context, "网络连接异常", Toast.LENGTH_LONG).show();
- } catch (SocketTimeoutException e) {
- Toast.makeText(context, "连接超时", Toast.LENGTH_LONG).show();
- } catch (Exception e) {
- e.printStackTrace();
- }
- return false;
- }
- // 登录
- public static boolean logins(Context context, String action, String username, String password,
- String from) {
- Log.i("TAG", "得到的" + context + action + username + password);
- try {
- HttpClient httpClient = new DefaultHttpClient();
- // 请求超时
- httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 5000);
- // 读取超时
- httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 5000);
- StringBuilder uri = new StringBuilder();
- uri.append(HOST_IP + "XXXXXXXX" + "?" + "action=" + action);
- uri.append("&username=");
- uri.append(username);
- uri.append("&password=");
- uri.append(password);
- uri.append("&from=");
- uri.append(from);
- uri.append("&server=");
- uri.append(server);
- uri.append("&apitime=");
- uri.append(serial);
- uri.append("&key=");
- uri.append(getMD5Str(serial + key));
- Log.i("TAG", "请求地址:" + uri.toString());
- HttpPost httpPost = new HttpPost(uri.toString());
- HttpResponse httpResponse = httpClient.execute(httpPost);
- String jsonforString = null;
- String result = null;
- String login = null;
- // 返回json报文
- if (httpResponse.getStatusLine().getStatusCode() == 200) {
- jsonforString = EntityUtils.toString(httpResponse.getEntity());
- JSONObject jsonObject = new JSONObject(jsonforString);
- Log.i("TAG", "JSONObject对象=" + jsonforString);
- result = jsonObject.getString("result");
- login = jsonObject.getString("uid");
- Log.i("TAG", "成功还是失败返回" + result);
- if (httpClient != null) {
- httpClient.getConnectionManager().shutdown();
- }
- if (result.equalsIgnoreCase("1")) {
- Log.i("TAG", "服务器返回码" + result);
- results = result;
- LoginUid = login;
- return true;
- } else {
- return false;
- }
- }
- } catch (ConnectException e) {
- Toast.makeText(context, "网络连接异常", Toast.LENGTH_LONG).show();
- } catch (SocketTimeoutException e) {
- Toast.makeText(context, "连接超时", Toast.LENGTH_LONG).show();
- } catch (Exception e) {
- e.printStackTrace();
- }
- return false;
- }
- // 快速注册
- public static boolean fast(Context context, String action, String from) {
- try {
- HttpClient httpClient = new DefaultHttpClient();
- // 请求超时
- httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 5000);
- // 读取超时
- httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 5000);
- StringBuilder uri = new StringBuilder();
- uri.append(HOST_IP + "XXXXXXXX" + "?" + "action=" + action);
- uri.append("&from=");
- uri.append(from);
- uri.append("&server=");
- uri.append(server);
- uri.append("&apitime=");
- uri.append(serial);
- uri.append("&key=");
- uri.append(getMD5Str(serial + key));
- Log.i("TAG", "快速注册请求地址:" + uri.toString());
- HttpPost httpPost = new HttpPost(uri.toString());
- HttpResponse httpResponse = httpClient.execute(httpPost);
- String jsonforString = null;
- String result = null;
- String UserNames = null;
- String PassWords = null;
- String UserId = null;
- // 返回json报文
- if (httpResponse.getStatusLine().getStatusCode() == 200) {
- jsonforString = EntityUtils.toString(httpResponse.getEntity());
- JSONObject jsonObject = new JSONObject(jsonforString);
- Log.i("TAG", "JSONObject对象=" + jsonforString);
- result = jsonObject.getString("result");
- Log.i("TAG", "快速注册成功还是失败返回码" + result);
- UserNames = jsonObject.getString("username");
- PassWords = jsonObject.getString("password");
- Log.i("TAG", "快速注册成功返回的密码" + PassWords);
- Log.i("TAG", "快速注册成功返回用户名" + UserNames);
- UserId = jsonObject.getString("uid");
- if (httpClient != null) {
- httpClient.getConnectionManager().shutdown();
- }
- if (result.equalsIgnoreCase("1")) {
- Log.i("TAG", "快速注册服务器返回码" + result);
- results = result;
- FastUserName = UserNames;
- FastPassWord = PassWords;
- Uid = UserId;
- return true;
- } else {
- return false;
- }
- }
- } catch (ConnectException e) {
- Toast.makeText(context, "网络连接异常", Toast.LENGTH_LONG).show();
- } catch (SocketTimeoutException e) {
- Toast.makeText(context, "连接超时", Toast.LENGTH_LONG).show();
- } catch (Exception e) {
- e.printStackTrace();
- }
- return false;
- }
- // 修改帐号
- public static boolean updateData(Context context, String action, String uid, String username,
- String password, String newname, String newpass) {
- try {
- HttpClient httpClient = new DefaultHttpClient();
- // 请求超时
- httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 5000);
- // 读取超时
- httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 5000);
- StringBuilder uri = new StringBuilder();
- uri.append(HOST_IP + "XXXXXXXXX" + "?" + "action=" + action);
- uri.append("&uid=");
- uri.append(uid);
- uri.append("&username=");
- uri.append(username);
- uri.append("&password=");
- uri.append(password);
- uri.append("&newname=");
- uri.append(newname);
- uri.append("&newpass=");
- uri.append(newpass);
- uri.append("&server=");
- uri.append(server);
- uri.append("&apitime=");
- uri.append(serial);
- uri.append("&key=");
- uri.append(getMD5Str(serial + key));
- Log.i("TAG", "提交更新:" + uri.toString());
- HttpPost httpPost = new HttpPost(uri.toString());
- HttpResponse httpResponse = httpClient.execute(httpPost);
- String jsonforString = null;
- String result = null;
- String UserNames = null;
- String PassWords = null;
- String UserId = null;
- // 返回json报文
- if (httpResponse.getStatusLine().getStatusCode() == 200) {
- jsonforString = EntityUtils.toString(httpResponse.getEntity());
- JSONObject jsonObject = new JSONObject(jsonforString);
- // Log.i("TAG", "JSONObject对象=" + jsonforString);
- result = jsonObject.getString("result");
- Log.i("TAG", "提交更新返回码" + result);
- // UserNames = jsonObject.getString("username");
- // PassWords = jsonObject.getString("password");
- // Log.i("TAG", "快速注册成功返回的密码" + PassWords);
- // Log.i("TAG", "快速注册成功返回用户名" + UserNames);
- UserId = jsonObject.getString("uid");
- if (httpClient != null) {
- httpClient.getConnectionManager().shutdown();
- }
- if (result.equalsIgnoreCase("1")) {
- Log.i("TAG", "提交更新" + result);
- // results = result;
- // FastUserName = UserNames;
- // FastPassWord = PassWords;
- // Uid = UserId;
- return true;
- } else {
- return false;
- }
- }
- } catch (ConnectException e) {
- Toast.makeText(context, "网络连接异常", Toast.LENGTH_LONG).show();
- } catch (SocketTimeoutException e) {
- Toast.makeText(context, "连接超时", Toast.LENGTH_LONG).show();
- } catch (Exception e) {
- e.printStackTrace();
- }
- return false;
- }
- // MD5
- public static String getMD5Str(String str) {
- MessageDigest messageDigest = null;
- try {
- messageDigest = MessageDigest.getInstance("MD5");
- messageDigest.reset();
- messageDigest.update(str.getBytes("UTF-8"));
- } catch (NoSuchAlgorithmException e) {
- e.printStackTrace();
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- }
- byte[] byteArray = messageDigest.digest();
- StringBuffer md5StrBuff = new StringBuffer();
- for (int i = 0; i < byteArray.length; i++) {
- if (Integer.toHexString(0xFF & byteArray<i>).length() == 1) {
- md5StrBuff.append("0").append(
- Integer.toHexString(0xFF & byteArray<i>));
- } else {
- md5StrBuff.append(Integer.toHexString(0xFF & byteArray<i>));
- }
- }
- return md5StrBuff.toString();
- }
- }
- </i></i></i>
项目下载地址:
http://download.csdn.net/detail/zxciop110/4737112