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提醒用户开启网络

/**

* 根据用户名和密码登陆

*

* @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)){//用户名和密码正确

rememberUsernameAndPassword();

Intent mainIntent = new Intent(LoginActivity.this, MainActivity.class);

startActivity(mainIntent);

finish();

}else if("1002".equals(resCode)){//用户名不存在

Message msg = handler.obtainMessage();

msg.what = USER_NOT_EXIST;

handler.sendMessage(msg);

}else if("1003".equals(resCode)){//密码错误

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去处理,做出相应的处理

时间: 2024-10-13 19:50:50

Android APP 登陆模块的相关文章

android 通过post发送数据 完成客户端登陆模块

1.get是从服务器上获取数据,post是向服务器传送数据.2.get是把参数数据队列加到提交表单的 ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到.post是通过HTTPpost机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址.用户看不到这个过程.3.对于get方式,服务器端用 Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据.4.get

Android APP架构心得

前言 从JavaEE转到Android开发也2年多了,开发的项目也有4,5个了(公司项目),其中有3个项目前期都是自己独立开发,从一开始的毫无架构到现在对如何架构也有一点心得,所以在此分享出来,大家一起交流 什么是架构 在我看来,软件架构绝对不只是框架的堆砌,看我看来,架构是为了方便软件维护.扩展.安全性.切入性(我也不知道有没有人提出过这个关键字,因为的确很少看见,简单来说我这里说的切入性就是指一个以前没有接触过这个项目的人,能快速加入到这个项目中,对项目进行维护.修改和扩展) 维护性 一个好

Android App的设计架构:MVC,MVP,MVVM与架构经验谈

来源: Android App的设计架构:MVC,MVP,MVVM与架构经验谈 和MVC框架模式一样,Model模型处理数据代码不变在Android的App开发中,很多人经常会头疼于App的架构如何设计: 我的App需要应用这些设计架构吗? MVC,MVP等架构讲的是什么?区别是什么? 本文就来带你分析一下这几个架构的特性,优缺点,以及App架构设计中应该注意的问题. 1.架构设计的目的 通过设计使程序模块化,做到模块内部的高聚合和模块之间的低耦合.这样做的好处是使得程序在开发的过程中,开发人员

Android App组件之ListFragment -- 说明和示例(转载)

转自:http://www.cnblogs.com/skywang12345/p/3160260.html 1 ListFragement介绍 ListFragment继承于Fragment.因此它具有Fragment的特性,能够作为activity中的一部分,目的也是为了使页面设计更加灵活. 相比Fragment,ListFragment的内容是以列表(list)的形式显示的. 1.1 ListFragment布局 ListFragment的布局默认包含一个list view.因此,在List

重新设计一款Android App,我会怎么做?

开发工具的选择 开发工具我将选用 Android Studio,它是Google官方指定的Android开发工具,目前是1.2.2稳定版,1.3的预览版也已经发布了. Android Studio的优点就不需多说了,GitHub上大部分的Android开源库也都已迁移到Android Studio上来,在未提供 jar文件时,使用Android Studio可以极为方便地集成开源库.最为重要的是Google已宣布将在年底前停止对 Eclipse Android开发工具的一切支持(Google E

Android简单登陆页面

布局: 线性布局+相对布局 日志打印: 利用LogCat和System.out.println打印观察. Onclick事件是采用过的第四种: 在配置文件中给Button添加点击时间 涉及知识: 通过上线文context获得文件的路径和缓存路径,保存文件 布局代码: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.an

WellRelax-一款白噪音Android App,完整源码奉上!

一款简单白噪音Android App源码.一共有14中音效.多种音效混合播放,定时停止. 程序中全部使用IconFont,没有使用图片,自定义的View,实现了各种音效的控制. 漂亮的倒计时功能.定时任务功能封装成了模块,方便提取使用. 用到技术有:自定义View,IConFont,mediaplayer循环播放,封装好的定时任务功能(用于倒计时),EventBus. Github欢迎fork.

低功耗蓝牙(BLE)在 Android APP 中的应用

低功耗蓝牙(BLE)在 Android APP 中的应用 前言 最近公司接了一个新项目,用户可以把自己的乐器跟Phone或Pad连接起来,当弹奏乐器的时候,会把演奏情况同步反馈到设备上,方便用户练习,有点类似于之前玩过的一款叫[ 吉他英雄 ]的游戏.不过这次不用插线,直接蓝牙无线连接就可以了. 那么问题来了,因为弹奏的时候数据传输一直在进行,但是如果要一直打开蓝牙的话是很费电的,也许没几首曲子下来设备的电量就耗掉了不少,这当然是无法接受的.那有没有什么好的解决方案呢? 运气真好,Android在

个人开发者做一款Android App需要知道的事情

个人开发者做一款Android App需要知道的事情 在大学时, 自己是学计算机专业的,而且还和老师一起做过一年半的项目. 有时候是不是有这样的想法,做一个自己的网站.但一直未付诸行动.2012年时, 终于付诸行动了,花了三个月,现学现卖, 熬夜通宵用PHP做了一个小网站,但后续就再没有坚持下去. 直到从电信行业转行互联网行业后,做一款属于自己的应用的的想法越来越迫切,于是今年开始便投入到Android App开发的阵营中来.今年断断续续做了4款Android App应用, 一款公司应用,三款自