冲刺十九天

学习分享亮点加入与保存用户信息(自动登录)

学习分享亮点

   我在学习分享板块加入“课后题”,“往届期末相关试卷及答案”,“网课答案”等内容,通过一个广告链接接入到改页面,然后在该页面设计的形式有:最近阅读习题(保留用户的观看数据),全部相关习题展示

因为该应用是服务与本校的学生,因此所选用的教材也是本学校发布的,免去学生上网去查找答案的痛苦。

  具体实现就是接下来要开始攻克的地方。

  

 

 用户自动登录

  针对用户使用角度而言,不愿意重复的趣输入账号和密码,因此只在用户第一次登录时输入用户名和密码,此外便不需要在输入,直接登录,这里用到的技术是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();
                }

 

明天任务:实现课后题布局与上传书籍功能

 

posted @ 2020-05-27 23:43  清风紫雪  阅读(126)  评论(0编辑  收藏  举报