有图有真相:
我们首先看注册那边返回的JSON都是什么内容吧(一会我会讲到如何抓到result>1的错误信息,然后返回给activity显示出来) 一般你们公司都会有个后台给你们写个接口文档扔给你 让你去做的
[mw_shl_code=java,true]{ “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会返回错误的具体原因[/mw_shl_code]
我们在注册页面去请求服务器:
在我的工程:Register类
[mw_shl_code=java,true]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);
}
[/mw_shl_code]
传的参数里面 第一个就是context 第二个就是一个注册的参数(你们后台都会有自己弄一个参数来区分的),第三个参数就是你的名字 第4个参数就是你的密码 第五个参数其实就是一个渠道的意思(从那个渠道过来注册的,比如你从googlePlay注册的 这里随便定义一个参数 让你们的老大知道这个从googlePlay下载注册的,现在产品都这样搞的)
如果注册接口成功返回true 那么flag就会是true(默认是false嘛) 就去执行Intent,然后putExtra 把需要的东西传值到登录界面
登录界面会做什么事呢? 接着上面的问题 看下面的代码:
[mw_shl_code=java,true] /** 初始化注册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);
}
}[/mw_shl_code]
登录界面就会用getStringExtra方法把刚刚从注册传过来的值 这里是根据Key,value 我们只要得到这个key("name")就OK了。
然后我们在用setText 显示在editText上!
[mw_shl_code=java,true] view_userName.setText(userName);
view_password.setText(password);[/mw_shl_code]
然后我们在点击登录的时候看代码 如何把刚刚从注册传过来的值在去传到登录接口 其实在这里很简单 在赋值给的string就OK了 赋值好后然后在把赋值的值传到登录接口 看例子:
[mw_shl_code=java,true] /** 登录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();// 开启
}
};[/mw_shl_code]
[mw_shl_code=java,true]// 另起一个线程登录
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);
}
}
}
}[/mw_shl_code]
登录后 我们就会看到一个登录成功的页面,下面有4个按钮 修改帐号,添加资料,从设密码
那么修改帐号的流程 还是跟上面登录注册一样 把所有的值用putExtra方法传过来 然后在修改帐号页面getStringExtra在得到("name",passwor)等 ,在从新声明一个string类型 在赋值 在去请求 修改帐号密码接口
添加资料也就是去请求地址 然后里面需要传什么东西 就传什么过去。
从设置也是和上面的流程 putExtra-----getStringExtra("name",passwor)等 在从新声明一个string类型 在赋值 在去请求
其实注册 登录 修改帐号密码 和添加资料 都是很简单的 无非就是putExtra getStringExtra 声明 赋值 请求 返回信息 显示