歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android APP 登陸模塊

Android APP 登陸模塊

日期:2017/3/1 9:41:54   编辑:Linux編程

首先我想強調一點,這個登陸的模塊最好是放在另外一個線程裡面來實現,否則有可能會爆出一系列的問題,

然後再與主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去處理,做出相應的處理

Ubuntu 14.04 x64配置Android 4.4 kitkat編譯環境的方法 http://www.linuxidc.com/Linux/2014-05/101148.htm

Ubuntu 12.04搭建Android開發環境 http://www.linuxidc.com/Linux/2012-09/69961.htm

Ubuntu 14.04 配置 Android SDK 開發環境 http://www.linuxidc.com/Linux/2014-05/101039.htm

64位Ubuntu 11.10下Android開發環境的搭建(JDK+Eclipse+ADT+Android SDK詳細) http://www.linuxidc.com/Linux/2013-06/85303.htm

Ubuntu 12.10 x64 安裝 Android SDK http://www.linuxidc.com/Linux/2013-03/82005.htm

更多Android相關信息見Android 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=11

Copyright © Linux教程網 All Rights Reserved