冲刺十九天
学习分享亮点加入与保存用户信息(自动登录)
学习分享亮点
我在学习分享板块加入“课后题”,“往届期末相关试卷及答案”,“网课答案”等内容,通过一个广告链接接入到改页面,然后在该页面设计的形式有:最近阅读习题(保留用户的观看数据),全部相关习题展示
因为该应用是服务与本校的学生,因此所选用的教材也是本学校发布的,免去学生上网去查找答案的痛苦。
具体实现就是接下来要开始攻克的地方。

用户自动登录
针对用户使用角度而言,不愿意重复的趣输入账号和密码,因此只在用户第一次登录时输入用户名和密码,此外便不需要在输入,直接登录,这里用到的技术是sharepreference的读取与修改
HashMap<String, String> loginmap = null;
loginmap= (HashMap<String, String>) getMsg("login");
if(loginmap.get("id")!=""&&loginmap.get("name")!=""&&loginmap.get("imguser")!="")
{
Log.i("map", loginmap.toString());
IMLogin(loginmap.get("id"));
startActivity(new Intent(Login.this, MainActivity.class)
.putExtra("id", loginmap.get("id"))
.putExtra("name",loginmap.get("name"))
.putExtra("imguser",loginmap.get("imguser")));
}
login_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final String name = search.getText().toString();
String userpwd = pwd.getText().toString();
final String reqdata = "method=login&name=" + name + "&pwd=" + userpwd + "";
new Thread(new Runnable() {
@Override
public void run() {
try {
final JSONObject jsonObject = new JSONObject(String.valueOf(HttpUtil.sendPost(requrl, reqdata)));//子线程获取json结果
Log.d("login", jsonObject.toString());
runOnUiThread(new Runnable() { //主线程运行跳转活动
@Override
public void run() {
try {
Toast.makeText(Login.this, jsonObject.get("msg").toString(), Toast.LENGTH_SHORT).show();
if (jsonObject.get("status").equals("1")) { //状态码1代表登陆成功
if (!judgeUserExists(name))
recordUser(name);
IMLogin(jsonObject.getString("id"));
startActivity(new Intent(Login.this, MainActivity.class)
.putExtra("id", jsonObject.get("id").toString())
.putExtra("name",name)
.putExtra("imguser",jsonObject.getString("imguser")));
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("id", jsonObject.get("id").toString());
map.put("name",name);
map.put("imguser",jsonObject.getString("imguser"));
saveMsg("login", map);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
});
} catch (JSONException e) {
e.printStackTrace();
}
}
}).start();
}
});//将数据存储进入共享参数
public boolean saveMsg(String fileName, Map<String, Object> map) {
boolean flag = false;
// 一般Mode都使用private,比较安全
SharedPreferences preferences = getSharedPreferences(fileName,
Context.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
// Map类提供了一个称为entrySet()的方法,这个方法返回一个Map.Entry实例化后的对象集。
// 接着,Map.Entry类提供了一个getKey()方法和一个getValue()方法,
// 因此,上面的代码可以被组织得更符合逻辑
for (Map.Entry<String, Object> entry : map.entrySet()) {
String key = entry.getKey();
Object object = entry.getValue();
// 根据值得不同类型,添加
if (object instanceof Boolean) {
Boolean new_name = (Boolean) object;
editor.putBoolean(key, new_name);
} else if (object instanceof Integer) {
Integer integer = (Integer) object;
editor.putInt(key, integer);
} else if (object instanceof Float) {
Float f = (Float) object;
editor.putFloat(key, f);
} else if (object instanceof Long) {
Long l = (Long) object;
editor.putLong(key, l);
} else if (object instanceof String) {
String s = (String) object;
editor.putString(key, s);
}
}
flag = editor.commit();
return flag;
}
// 读取数据
public Map<String, String> getMsg(String fileName) {
Map<String, String> map = null;
// 读取数据用不到edit
SharedPreferences preferences = getSharedPreferences(fileName,
Context.MODE_PRIVATE);
//Context.MODE_APPEND可以对已存在的值进行修改
map = (Map<String, String>) preferences.getAll();
return map;
}通过存储和读取来实现用户的自动登录,同时当你选择退出登录后,那么修改sharepreference的值,让他为空
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("id","");
map.put("name","");
map.put("imguser","");
if(saveMsg("login", map))
{
Intent intent=new Intent(getActivity(), Login.class);
startActivity(intent);
getActivity().finish();
}明天任务:实现课后题布局与上传书籍功能