android移动开发-登录检查网络和记录登录成功的信息的解决方案
2014-12-10 15:06
411 查看
我们平时开发android移动端的时候,经常需要做登录操作,那么怎么检查网络和记录登录成功的信息为以后可以使用呢?
以下是解决方法:
1、当点击按钮时需要检查是否有网络连接;
2、移动端保存用户登录成功所输入的用户名和密码(加密),并将服务器返回的一串标识保存到sharePreferences里面;
3、用户下次打开软件的时候,程序自动去读取用户名和密码;
4、当用户需要跟服务器交互的时候,传递sharePreferences里面的那一串标识,当然这当中需要有加密操作(后话)。
LoginActivity.java
以下是解决方法:
1、当点击按钮时需要检查是否有网络连接;
2、移动端保存用户登录成功所输入的用户名和密码(加密),并将服务器返回的一串标识保存到sharePreferences里面;
3、用户下次打开软件的时候,程序自动去读取用户名和密码;
4、当用户需要跟服务器交互的时候,传递sharePreferences里面的那一串标识,当然这当中需要有加密操作(后话)。
LoginActivity.java
import java.util.HashMap; import java.util.Map; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.net.ConnectivityManager; import android.net.NetworkInfo.State; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.provider.Settings; import android.util.Log; import android.view.View; import android.view.Window; import android.widget.Button; import android.widget.EditText; import cn.com.flaginfo.open.OpenApi; import cn.com.flaginfo.open.OpenApiException; import com.wneng.evaluation.R; import com.wneng.evaluation.base.BaseActivity; import com.wneng.evaluation.util.DefaultContants; import com.wneng.evaluation.util.FileUtils; import com.wneng.evaluation.util.JsonHelper; import com.wneng.evaluation.util.StringUtil; import com.wneng.evaluation.util.SystemMessage; @SuppressWarnings("rawtypes") public class LoginActivity extends BaseActivity { private Button loginBtn; private EditText editUserName; private EditText editUserPwd; private SharedPreferences preferences; private Editor editor; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.login); preferences = getSharedPreferences("userData", MODE_WORLD_READABLE); // 检查网络 if (!CheckNetworkState()) { showTips(); } editUserName = (EditText) this.findViewById(R.id.editUserName); editUserPwd = (EditText) this.findViewById(R.id.editUserPwd); // 初始化数据 LoadUserdata(); loginBtn = (Button) this.findViewById(R.id.login_btn); loginBtn.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View arg0) { if (!CheckNetworkState()) { showTips(); return; } new Thread() { @Override public void run() { // 作登录校验 OpenApi sdk = new OpenApi("", SystemMessage.getString("appKey")); sdk.setServerName(SystemMessage .getString("protocolServer")); String scriptName = "/evaluation!login.do"; Map<String, Object> params = new HashMap<String, Object>(); params.put("openKey", SystemMessage.getString("openKey")); params.put("openId", SystemMessage.getString("openId")); // 业务参数 String userName = editUserName.getText().toString(); String userPwd = editUserPwd.getText().toString(); if (StringUtil.isNullOrEmpty(userName)) { Message msg = handler.obtainMessage(); msg.what = 0; handler.sendMessage(msg); return; } if (StringUtil.isNullOrEmpty(userPwd)) { Message msg = handler.obtainMessage(); msg.what = 1; handler.sendMessage(msg); return; } Message msg = handler.obtainMessage(); msg.what = 3; handler.sendMessage(msg); params.put("userName", userName); params.put("password", userPwd); try { String resp = sdk.api(scriptName, params); Log.d("LoginActivity", "客户端请求开放平台返回的数据=" + resp); Map map = JsonHelper.parseToObject(resp, Map.class); String retCode = (String) map.get("returnCode"); if (DefaultContants.RETURN_SUCCESS.equals(retCode)) { String appKey = (String) map.get("token"); String filePath = getString(R.string.file_path) + "token/data.json"; FileUtils.saveFile(filePath, appKey); //清空userIds //清空正在考试的考生 scriptName = "/evaluation!setUserStatus.do"; params.put("userIds", "All"); params.put("operateType", "delete"); params.remove("userName"); params.remove("password"); resp = sdk.api(scriptName, params); stopProgressDialog(); editor = preferences.edit(); editor.putString("userName", userName); editor.putString("userPwd", userPwd); editor.commit(); Intent intent = new Intent(); intent.setClassName(LoginActivity.this, getString(R.string.evaluation_activity)); startActivity(intent); finish(); } else { stopProgressDialog(); msg = handler.obtainMessage(); msg.what = 2; handler.sendMessage(msg); Log.i("LoginActivity", (String) map.get("msg")); } } catch (OpenApiException e) { stopProgressDialog(); msg = handler.obtainMessage(); msg.what = 4; handler.sendMessage(msg); //Toast.makeText(LoginActivity.this, "系统异常。", Toast.LENGTH_SHORT).show(); Log.i("LoginActivity", e.getErrorCode() + ":" + e.getMessage()); e.printStackTrace(); } } }.start(); } }); } // 初始化用户数据 private void LoadUserdata() { String realUsername = preferences.getString("userName", ""); String realPassword = preferences.getString("userPwd", ""); if (!StringUtil.isNullOrEmpty(realUsername) || !StringUtil.isNullOrEmpty(realPassword)) { editUserName.setText(realUsername); editUserPwd.setText(realPassword); } } // 检查网络状态 public boolean CheckNetworkState() { ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); State mobile = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE) .getState(); State wifi = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI) .getState(); // 如果3G、wifi、2G等网络状态是连接的,则退出,否则显示提示信息进入网络设置界面 if (mobile == State.CONNECTED || mobile == State.CONNECTING) return true; if (wifi == State.CONNECTED || wifi == State.CONNECTING) return true; return false; } /** * 显示网络是否可用提示 */ private void showTips() { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setIcon(android.R.drawable.ic_dialog_alert); builder.setTitle("没有可用网络"); builder.setMessage("当前网络不可用,是否设置网络?"); builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // 如果没有网络连接,则进入网络设置界面 startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS)); } }); builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.cancel(); LoginActivity.this.finish(); } }); builder.create(); builder.show(); } // Handler Handler handler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case 0: showMessage("请输入用户名。"); break; case 1: showMessage("请输入密码。"); break; case 2: showMessage("用户名或密码错误。"); break; case 3: startProgressDialog(getString(R.string.loginProcess)); break; case 4: showMessage("系统异常。"); break; } } }; }
相关文章推荐
- Android开源代码解读の使用TelephonyManager获取移动网络信息
- 跨平台移动开发实战(四)------Android开发环境网络连通解决方案
- 王家林的81门一站式云计算分布式大数据&移动互联网解决方案课程第12门课程:Android系统完整训练:开发搭载Android系统的产品
- Android开发:还原通讯录、历史通话记录、短信息记录(insert方法)
- Android开发全程记录(十)——使用新浪微博授权登录和分享注意事项
- Android开发八 “尚未注册网络”错误信息的解决办法
- Android系统信息获取 之十:移动网络相关信息获取
- 王家林的81门一站式云计算分布式大数据&移动互联网解决方案课程第14门课程:Android软硬整合设计与框架揭秘: HAL&Framework &Native Service &App&HTML5架构设计与实战开发
- 【No5.】Android开发检查手机网络工具类
- 实现开启和关闭android移动网络(做AppWidget开发的收获)
- 跨平台移动开发实战(四)------Android开发环境网络连通解决方案
- 实现开启和关闭Android移动网络(做AppWidget开发的收获)
- android 移动开发 SQLitedatabase嵌入轻级数据库 解决方案1
- Android短信开发相关信息记录
- android开发之快速设置,一键wifi开闭,移动网络开闭,电池设置,飞行模式,………………………………
- android GSM+CDMA基站定位--获取移动网络相关信息
- android开发获取网络图片并可拖拽移动
- Android实现检查并下载APK更新、安装APK及获取网络信息的方法
- Android开发之WIFI编程:设置信息登录热点
- Android开发全程记录(九)——使用新浪微博登录第三方应用