Android APP 登陆模块
首先我想强调一点。这个登陆的模块最好是放在另外一个线程里面来实现。否则有可能会爆出一系列的问题,
然后再与主UI 交互。这样就不会爆ANR异常
1.对于登陆模块的。首先大体的逻辑肯定是要清晰的。
//在这个登陆另起的线程中
//第一步首先要推断 是否有网络存在
//第二步分别对 是否有网络做对应的处理
//第三步分别对 有网络做对应的处理
//第四步分别对 没有网络做对应的处理
2.确定登陆逻辑之后接下来是怎样实现功能的问题,以下我给出最基本的核心代码
a.推断 是否有网络存在
/**
* 推断当前环境下网络是否可用
*
* @param context
* @return true 可用 false 不可用
*/
public static boolean isNetworkAvailable(Context context) {
ConnectivityManager mConnectivity = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
TelephonyManager mTelephony = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
// 检查网络连接。假设无网络可用。就不须要进行连网操作等
NetworkInfo info = mConnectivity.getActiveNetworkInfo();
if (info == null || !mConnectivity.getBackgroundDataSetting()) {
return false;
}
// 推断网络连接类型,仅仅有在3G或wifi里进行一些数据更新。
int netType = info.getType();
int netSubtype = info.getSubtype();
if (netType == ConnectivityManager.TYPE_WIFI) {
return info.isConnected();
} else if (netType == ConnectivityManager.TYPE_MOBILE
&& netSubtype == TelephonyManager.NETWORK_TYPE_UMTS
&& !mTelephony.isNetworkRoaming()) {
return info.isConnected();
} else {
return false;
}
}
b.假设是网络可用的话,则继续下一步;假设没有网络的话,就Toast提醒用户开启网络
/**
* 依据username和password登陆
*
* @param uname
* @param pwd
*/
private void login(String uname, String pwd) {
try {
HttpParams httpParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParams, 10000);
HttpConnectionParams.setSoTimeout(httpParams, 10000);
HttpClient httpclient = new DefaultHttpClient(httpParams);
String uri = "http://xxx.xxx.xxx.xxxx:8080/api/v1/auth/login";
HttpPost httppost = new HttpPost(uri);
//加入http头信息
httppost.addHeader("Content-Type", "application/json");
//http post的json数据格式: {"id":"TOD4727","passwd":"8111668ebce8f8d27fc2f98391cf20c1"}
JSONObject obj = null;
HttpResponse response = null;
obj = new JSONObject();
obj.put("id", uname);
obj.put("passwd", MD5.GetMD5Code(pwd));
// System.out.println("-----post the data is ++++ " + obj.toString());
httppost.setEntity(new StringEntity(obj.toString()));
response = httpclient.execute(httppost);
int code = response.getStatusLine().getStatusCode();
if (200 == code) { //訪问正常
String rev = EntityUtils.toString(response.getEntity());//返回json格式:{"code":"1000","message":"ok","description":""}
System.out.println("-----get the data is ++++ " + rev);
obj = new JSONObject(rev);
String resCode = obj.getString("code");
if("1000".equals(resCode)){//username和password正确
rememberUsernameAndPassword();
Intent mainIntent = new Intent(LoginActivity.this, MainActivity.class);
startActivity(mainIntent);
finish();
}else if("1002".equals(resCode)){//username不存在
Message msg = handler.obtainMessage();
msg.what = USER_NOT_EXIST;
handler.sendMessage(msg);
}else if("1003".equals(resCode)){//password错误
Message msg = handler.obtainMessage();
msg.what = ERROR_PASSWORD;
handler.sendMessage(msg);
}
}else{//訪问出现异常
Message msg = handler.obtainMessage();
msg.what = NET_PROBLEM;
handler.sendMessage(msg);
}
} catch (Exception e) {//訪问出现异常
// TODO Auto-generated catch block
Message msg = handler.obtainMessage();
msg.what = NET_PROBLEM;
handler.sendMessage(msg);
e.printStackTrace();
}
}
//这些handler发送的信息交付给handler去处理。做出对应的处理
Android APP 登陆模块的更多相关文章
- 初步探究Android App API接口测试--实战
一.Android App API接口测试 1.如何学好Android App API接口测试 postman可以用来实现API接口自动化测试,但是也有弊端,无法实现接口测试数据的参数化,为了达到接口 ...
- MVP应用在android app上
使用MVP模式来解耦activity中业务代码和界面代码.在activity中,将其中的业务抽象到presenter层:将其中的界面代码抽象到View层. MVP模式: 一个软件被划分成三层,View ...
- Android App的设计架构:MVC,MVP,MVVM与架构经验谈
相关:http://www.cnblogs.com/wytiger/p/5996876.html 和MVC框架模式一样,Model模型处理数据代码不变在Android的App开发中,很多人经常会头疼于 ...
- [转]Android App整体架构设计的思考
1. 架构设计的目的 对程序进行架构设计的原因,归根到底是为了提高生产力.通过设计使程序模块化,做到模块内部的高聚合和模块之间的低耦合.这样做的好处是使得程序在开发的过程中,开发人员只需要专注于一点, ...
- [转]设计一款Android App总结
开发工具的选择 开发工具我将选用Android Studio,它是Google官方指定的Android开发工具,目前是1.2.2稳定版,1.3的预览版也已经发布了.Android Studio的优点就 ...
- 【Bugly安卓开发干货分享】Android APP 快速 Pad 化实现
项目背景 采用最新版本手机 APP(之后称为 MyApp)代码,实现其 Pad 化,为平板和大屏手机用户提供更好的体验.为实现 MyApp 的 Pad 化工作,需要我们首先来了解一下 MyApp 项目 ...
- 不可或缺 Windows Native (25) - C++: windows app native, android app native, ios app native
[源码下载] 不可或缺 Windows Native (25) - C++: windows app native, android app native, ios app native 作者:web ...
- How To Use Proguard in Android APP
在Android开发完成即将发布给用户使用时,还有最后重要的一步:代码混淆,这时候,Proguard就派上用场了,大家谁也不想辛辛苦苦写的代码太容易被别人反编译过来,而Proguard就是帮我们实现这 ...
- 【转载】Android app 安全测试调研及执行
本文来源于:http://testerhome.com/topics/2209 一.通过在线工具进行测试 1.腾讯金刚审计系统http://service.security.tencent.com 优 ...
随机推荐
- sqli-5&6
第五关 Double Injection - Single Quotes - String (双注入GET单引号字符型注入) 1.发现前几关的方法都不能用了,要么报错(没有其他有关信息.要么什么也不出 ...
- Java架构师需要掌握的技术栈
- linux--基础知识1
#进入终端窗口,root命令提示符#,普通用户登陆提示符$,切换终端用户 ctrl+shift+F2,退出终端命令exit #init 0 关机 reboot 重启 ls查看当前目录下文件 ls ...
- 【技巧】Windows 10 1809无法接收1903解决方法
这都7月份了,Windows10 1903都升级的有一个月了,然而我的1809的系统一直找不到1903的更新. 虽说1903会有bug,但还是想体验一把.周围同事都更新了,心里还是痒痒的. 于是每天都 ...
- 【CF1257D】Yet Another Monster Killing Problem【贪心】
题意:给定一些怪物,每天可以选一个勇士进去打怪,每个勇士每天只能打不超过si个怪物,每个勇士只能打能力值≤pi的怪物,问最少多少天打完所有怪物 题解:贪心,每天尽可能多的去打怪,那么存一个对于长度为i ...
- redux简单使用
在前面的随便中有简单的使用过redux和react-redux,但是感觉写在一起,总是理不清楚,后面看了技术胖老师关于redux的视频后,感觉自己又有了新的理解,在这里简单记录一下. 项目准备 首先安 ...
- div 上禁止复制的css实现方法
div { -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-se ...
- postman 简单使用教程
Postman 安装 Postman 接口测试(Collection) Postman 接口测试(测试用例)Postman 接口测试(变量与参数化)Postman 接口测试(非 UI 运行模式 ...
- 笨办法学Python(learn python the hard way)--练习程序31-35
下面是练习31-练习35,基于python3 #ex31.py 1 print("You enter a dark room witn two doors. Do you go throug ...
- 定义一个JobService,开启本地服务和远程服务
@SuppressWarnings(value = ["unchecked", "deprecation"])@RequiresApi(Build.VERSIO ...