[Android实例] android注册 登录+修改帐号密码+添加资料+给指定帐号充值 .....

news/2024/3/4 10:30:19

有图有真相:

01094750_yOAP.png

01094750_ocz7.png

01094750_Aglb.png


01094750_nyWv.png


01094751_y3rf.png

01094751_Gkeg.png

我们首先看注册那边返回的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  声明   赋值   请求  返回信息   显示




转载于:https://my.oschina.net/huil/blog/350682


http://www.ppmy.cn/news/811688.html

相关文章

新增linux用户,linux 手动新增用户

手动新增用户 需要了解下面这些文件及目录: 用户账号与密码参数方面的文件:/etc/passwd,/etc/shadow 用户组相关方面文件:/etc/group,/etc/gshadow 用户的组文件夹:/home/账号名称 /etc/default/useradd /etc/skel/* /etc/login.d…

初始化一个新的cURL辉煌并抓取一个web页面。

(PHP 4 > 4.0.2, PHP 5, PHP 7) curl_setopt — 设置一个cURL传输选项 说明 bool curl_setopt ( resource $ch , int $option , mixed $value ) 为给定的cURL会话句柄设置一个选项。 参数 ch 由 curl_init() 返回的 cURL 句柄。 option 需要设置的CURLOPT_XXX选项。 val…

密码学-DES加密解密算法的实现-C++(代码原创,算法细节参考其他博客)

实验内容1:实现DES加密算法 1.算法简介 明文按64位进行分组,密钥长64位,密钥事实上是56位参与DES运算(第8、16、24、32、40、48、56、64位是校验位,使得每个密钥都有奇数个1)分组后的明文组和56位的密钥按…

MD5 密码破解 碰撞 网站

MD5反向查询网站 http://www.cmd5.com/ 文件MD5值查询网站 http://www.atool.org/file_hash.php 个人对密码破解的理解 1、使用MD5对密码加密有什么用? 一个输入(密码明文)有唯一的一个输出(加密后的密文),但反过来,一个输出却对应无数个输入,所以,当你拿到一个输出时,…

Python 爬虫逆向破解案例实战 (二):STEAM密码加密 (RSA) 逆向

目录 1. 非对称加密与 RSA1.1 介绍1.2 Python 实现 RSA 加密1.3 JavaScript 实现 RSA 加密2. STEAM 网站逆向分析3. 编码实现从本篇博文开始,我们将继续去学习开发中经常用到的编码、消息摘要算法和加密算法方面的知识。作为开发者,掌握这些知识可以让我们在设计反爬虫时有更…

JErasure库相关介绍

JErasure库提供一般的RS码和CRS码两种编码方式,是基于C的纠删码的类库。 JErasure库的相关学习 一、Galois Field(一)基本概念(二) G F ( 2 w ) GF(2^w) GF(2w) 二、CRS码(一)RS码简介&#xf…

[buuctf] crypto全解——121-146(不建议直接抄flag)

121.[INSHack2017]rsa16m 查看题目 给了nec都很大 所以当m^e 严重小于n的时候。c很可能就是 m^e 所以对c开e次方就能得到m import gmpy2 from Crypto.Util.number import * #读取 data open(rsa_16m.txt, r).read().split(\n) #print(data) m gmpy2.iroot(int(data[1][4:],…

最全MD5 密码破解 碰撞 网站

MD5反向查询网站 md5在线解密破解,md5解密加密 文件MD5值查询网站 HTML5 File Hash - 在线计算文件Hash值(CRC-32,MD5,SHA1,SHA-256) - aTool在线工具 个人对密码破解的理解 1、使用MD5对密码加密有什么用&#xff…

mysql8.0下载,安装,更改密码

文章目录 资源下载将mysql解压到/usr/local/mysql更改/etc/my.cnf创建数据存放路径用户组配置配置mysql用户的执行权限数据初始化启动服务环境变量配置修改初始密码防火墙管理,开启3306端口远程访问 资源下载 链接:https://pan.baidu.com/s/1ozfedVlRDsB8dqfJtol4m…

密码学课设实验——des加密c++实现

一、实验目的 通过实现DES/AES算法,加深对DES/AES算法的理解,同时学习组合密码常用的代换、移位等运算的实现。 实验内容 1)利用C\C实现DES/AES算法的加、解密运算。 实验步骤 Des加密的流程图如下 按照上面的原理图实现加密主要的函数如下…

vagrant 初始化centos7 虚拟机并安装weblogic12c

vagrant 初始化centos7 虚拟机并安装weblogic12c 环境说明及工具下载 linux版本:CentOS7 64bit fmw_12.2.1.4.0_wls_quick.jar jdk-8u333-linux-x64.tar.gz 虚拟机初始化 参考:https://blog.csdn.net/zh452647457/article/details/118076204 ce…

android注册 登录 修改帐号密码 添加资料 给新注册用户充值DEMO

最近公司让写个 android注册 登录 修改帐号密码 添加资料 给新注册用户充值DEMO 现在功能都已经OK 目前只剩下一些小细节 现在我就把源码发布出来 给一些需要的人参考,在这里 重点只讲怎么去请求服务器 和服务器返回的一些什么东西给我们 我们如何拿到 如何处理 最后的时…

玩转代码|WordPress防止暴力破解管理员密码

目录 一、author页面地址 1.在主题代码里实现 2.通过.htaccess文件添加301重定 二.xmlrpc.php 1.攻击方式 2.原理分析 3.防护建议 三. wordpress 后台默认地址 四.restAPI 方法一: 代码中禁止 方法二:通过Web 服务器限制restAPI的访问 方法三…

分组密码之AES算法

分组密码之AES算法 AES算法本质上是一种对称分组密码体制,采用代替/置换网络,每轮由三层组成:线性混合层确保多轮之上的高度扩散,非线性层由16个S盒并置起到混淆的作用,密钥加密层将子密钥异或到中间状态。AES是一个迭…

密码学---sha1编程

密码学作业—编程能力属实拉跨了 # 明文转二进制 def bin_trans(mw):b ""for i in mw:c bin(ord(i))[2:]while len(c) < 8:c 0 cb b creturn b # 对转换后的位字符串进行补位操作 并且转为16进制 def supplement(c):length len(c)%512if (length > 44…

密码学系列之七:数字签名

数字签名 1. 概述1.1 基本概念1.2 签名原理1.2.1 形式化定义1.2.2 签名过程 2 基于RSA的签名方案2.1 实现过程2.2 安全性分析 3 基于离散对数的签名方案3.1 ElGamal签名体制3.1.1 实现过程3.1.2 安全性分析 3.2 Schnorr签名体制3.2.1 实现过程3.2.2 安全性分析 3.3 DSA签名体制…

OpenWrt mw4530r 开发环境搭建

1、 安装环境 Linux系统&#xff0c;需安装如下依赖包&#xff1a; yum install binutils bzip2 gawk gcc gcc-c gettext makencurses-devel patch unzip wget zlib-devel git 这个不明白&#xff0c;直接安装就可以了。安装完之后要是还有问题就需要根据看出错信息自己下载…

mercurymw305r虚拟服务器,水星MW305R(V1-V3)路由器桥接设置教程

本文主要介绍了水星MW305R(V1-V3)路由器WDS桥接设置方法,也可以说是无线中继设置。但是需要注意的是,是V1-V3版本的水星MW305R路由器的无线桥接设置方法哦! 温馨提示: 水星MW305R路由器目前有V1、V2、V3、V4、V5、V6、V7共7个版本。水星系列路由器的硬件版本,大家可以在该…

C人脸识别

1、原始图片&#xff1a; 2、灰度化下&#xff1a; 3、均值滤波&#xff1a; 4、 二值图加边缘检测 5、生成积分图 6、把待检测的人脸区域划分为25个&#xff0c;因为是一个数组&#xff0c;这样分别统计每个区域的像素个数&#xff1a; x0: 60, y0: 100, x1: 157, y1: 200 …

【周赛总结】17-双周赛108

双周赛108 题目不是特别难&#xff0c;但是也许是十多天只做了每日一题&#xff0c;感觉不是很熟练。 T1、T2各WA一次&#xff0c;T2没有看到排序&#xff0c;T4没有从黑格子出发TLE了 这周继续努力呀 最长交替子序列【LC2765】 给你一个下标从 0 开始的整数数组 nums 。如…
最新文章