您的位置:首页 > 理论基础 > 计算机网络

android移动开发-登录检查网络和记录登录成功的信息的解决方案

2014-12-10 15:06 411 查看
我们平时开发android移动端的时候,经常需要做登录操作,那么怎么检查网络和记录登录成功的信息为以后可以使用呢?

以下是解决方法:

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;
}
}
};

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐