SharedPreferences 保存多个用户信息 并默认显示第一条用户信息

来源:互联网 发布:淘宝客服兼职是真的吗 编辑:程序博客网 时间:2024/04/27 21:09

运用安卓写登录时,有时需要记录用户的登录信息,通常采用SharedPreferences 保存,这里记录了保存多个用户信息的方法,之前参考了网上的资料,但是发现错误较多且不够详细(也许是我太笨不理解吧),话不多说,直接贴代码。

public void saveUserInXML(String name,String pasworrd){  //保存用户信息
        checkUser(name, pasworrd);
        String members = "";   //保存在xml中的用户信息字符串
        for(Member user:listMembers){
            String mName = user.getName();
            String mpassword = user.getPassword();
            String users = mName+"/"+mpassword+",";
            if(users == ""){
                members = users;
            }else{
                members += users;
            }
        }
        Editor editer = sp.edit();
        editer.putString("members", members);
        editer.commit();
    }
    public List<Member> getListUsers(){  //获取SharedPreferences中的用户列表信息
        List<Member> listMembers =new  ArrayList<Member>();   //用于保存用户信息
        String members = sp.getString("members", "");
        if(members != ""){ //有用户信息
            if(members.contains(",")){  //有,代表不止一个用户
                String[] users = members.split(",");
                for(String str : users){
                    Member m = new Member();
                    String[] user = str.split("/");
                    m.setName(user[0]);  //用户名
                    m.setPassword(user[1]);  //密码
                    listMembers.add(m);
                }
            }else{  //只有一个用户
                Member m = new Member();
                String[] user = members.split("/");
                m.setName(user[0]);  //用户名
                m.setPassword(user[1]);  //密码
                listMembers.add(m);
            }
            return listMembers;
        }else{
            return null;
        }
    }
    public void checkUser(String mName,String mPassword){  //检查用户是否存在 没有就保存到listMembers
        int position = -1;
        if(listMembers != null){
            for(int i=0;i<listMembers.size();i++){
                if(listMembers.get(i).getName().equals(mName)){
                    position = i;
                    break;
                }
            }
            if(position>=0){  //存在这个用户
                listMembers.remove(position);  //删除这个人
            }
        }else{
            listMembers = new ArrayList<Member>();
        }
        Member m = new Member();
        m.setName(mName);
        m.setPassword(mPassword);
        listMembers.add(m);
    }


以上三个方法是主要的记录多条信息的,具体代码去我的资源里下载  这里贴一下服务器端与客户端交互的方法

客户端

class AT extends AsyncTask{
        String reuslt = "";
        
        @Override
        protected void onPreExecute() {
            // TODO Auto-generated method stub
            pd.show();
        }

        @Override
        protected Object doInBackground(Object... params) {
            // TODO Auto-generated method stub
            String username = "";
            String password = "";
            username = et_username.getText().toString();
            password = et_password.getText().toString();
            Log.d("username+111111111", username+"++"+password);
            if(!username.equals("")&&!password.equals("")){
//                HttpPost httpRequest = new HttpPost(UriAPI.HTTPCustomer);
                List<BasicNameValuePair> paramsList = new ArrayList<BasicNameValuePair>();
                paramsList.add(new BasicNameValuePair("USERNAME", username));
                paramsList.add(new BasicNameValuePair("PASSWORD", password));
                try {
                    httpRequest.setEntity(new UrlEncodedFormEntity(paramsList,HTTP.UTF_8));
                    HttpResponse httpResponse = new DefaultHttpClient().execute(httpRequest);
                     if (httpResponse.getStatusLine().getStatusCode()==200) {  
                          //利用字节数组流和包装的绑定数据
                          byte[] data =new byte[2048];
                          //先把从服务端来的数据转化成字节数组
                          data =EntityUtils. toByteArray((HttpEntity)httpResponse.getEntity());
                          //再创建字节数组输入流对象  
                          ByteArrayInputStream bais = new ByteArrayInputStream(data);
                          //绑定字节流和数据包装流  
                          DataInputStream dis = new DataInputStream(bais);
                          //将字节数组中的数据还原成原来的各种数据类型,代码如下:
                          reuslt=new String(dis.readUTF());
                          Log.i("服务器返回信息:", reuslt);
                 }

                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            return reuslt;
        }
        @Override
        protected void onPostExecute(Object result) {
            // TODO Auto-generated method stub
            pd.cancel();
            if(reuslt.equals("")){
                reLoad();
            }else{
                String name = et_username.getText().toString();
                String password = et_password.getText().toString();
                saveUserInXML(name, password);  //保存用户信息到xml文件
                
                Intent i = new Intent(LoginActivity.this, LoginSuccessActivity.class);
                i.putExtra("ResultInfo", reuslt);
                startActivity(i);
            }
        }
    }

客户端:

@Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        System.out.println("=======连接服务器成功=====");
        req.setCharacterEncoding("utf-8");
        String username = req.getParameter("USERNAME");
        String password = req.getParameter("PASSWORD");
        System.out.println(username+"  "+password);
        HttpSession session = req.getSession(true);
        session.setAttribute("SessionID", username); //用户名用作sessionID
        System.out.println("SessionID===="+session.getAttribute("SessionID"));
        DataOutputStream out = new DataOutputStream(resp.getOutputStream());
        out.writeUTF("Success");
        out.close();
    }

0 0
原创粉丝点击