学习分享亮点加入与保存用户信息(自动登录)
学习分享亮点
我在学习分享板块加入“课后题”,“往届期末相关试卷及答案”,“网课答案”等内容,通过一个广告链接接入到改页面,然后在该页面设计的形式有:最近阅读习题(保留用户的观看数据),全部相关习题展示
因为该应用是服务与本校的学生,因此所选用的教材也是本学校发布的,免去学生上网去查找答案的痛苦。
具体实现就是接下来要开始攻克的地方。
用户自动登录
针对用户使用角度而言,不愿意重复的趣输入账号和密码,因此只在用户第一次登录时输入用户名和密码,此外便不需要在输入,直接登录,这里用到的技术是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(); }
明天任务:实现课后题布局与上传书籍功能