0

如果我有一个名为“myshared”的碎首选项文件,我如何将数据附加到它而不是覆盖?

在此处输入图像描述

我需要创建一个注册系统,并且我想使用 sharedprefernces 而不是外部文件保存每个新用户数据(用户名和密码)我对每个新用户数据的问题总是 myshared.xml 被覆盖我已经回答了我的帖子:

我试图通过每次使用不同的 ID 创建一个新的 xml 文件来解决这个问题,这是我的

编辑我的帖子:

package com.example.task_8;

import java.io.File;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;
import android.content.SharedPreferences;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class Ac_3 extends Activity {

    Button save;
    EditText userName,password;
    String name,pass,oldUser,oldpass,oldId;
    Intent i;



    @Override
    protected void onStart() {
        // TODO Auto-generated method stub
        super.onStart();

        setContentView(R.layout.ac_3);

        save= (Button)findViewById(R.id.button1);
        userName=(EditText) findViewById(R.id.editText1);
        password=(EditText) findViewById(R.id.editText2);



        /////////////////////////////////////////////////

          i = getIntent();




            TextWatcher listener = new TextWatcher() {

                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                }
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                }

                @SuppressWarnings("deprecation")
                @Override
                public void afterTextChanged(Editable s) {

                    name= userName.getText().toString();
                    pass= password.getText().toString();




                    } 


            };

            password.addTextChangedListener(listener);
            userName.addTextChangedListener(listener);




            save.setOnClickListener( new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub

                    File f=new File("/data/data/com.example.task_8/shared_prefs/"+name+".xml");

                    if(f.exists())

                            {


                        AlertDialog alertDialog = null;
                        alertDialog = new AlertDialog.Builder(Ac_3.this).create();
                        alertDialog.setTitle("error msg");
                        alertDialog.setMessage("This user name already exist , try another one");
                        alertDialog.show();



                            }

                    else 

                    {

                        SharedPreferences sp = getSharedPreferences("myshared"+name, 0);
                        SharedPreferences.Editor spe = sp.edit();
                        spe.putString("userName",name);
                        spe.putString("password",pass);
                        spe.commit();

                        i = new Intent(getApplicationContext(), MainActivity.class);
                        startActivity(i);


                    }


                }

            });

}

}
4

2 回答 2

1

我查看了 SharedPreferences 文档,并为您找到了一个选项。

您可以使用getStringSet()Set<String>添加首选项,因此您必须将一组用户名和密码保存到 SharedPreferences,这样您就可以拥有登录历史记录。

编辑:由于您正在为每个用户创建首选项,因此在保存到首选项文件之前,您将获得首选项文件的用户名,因此如果用户名不为空,那么您已经拥有首选项文件并且用户是重复的。

于 2013-07-01T13:18:32.000 回答
0

创建名称为用户名的单独文件,允许您存储有关每个用户的更多信息:

创建:

    String userName = "user_1";
    String password = "passwd";

    String hash = doHashPassword(password);
    SharedPreferences sp = getSharedPreferences(userName,MODE_PRIVATE);
    sp.edit().putString("pass",hash).commit();

授权:

    String userName = "user_1";
    String password = "passwd";

    SharedPreferences sp = getSharedPreferences(userName,MODE_PRIVATE);
    String hash = sp.getString("pass",null);

    if(hash != null && hash.equals(doHashPassword(password))){
        //--login success
    }else {
        //--access denied
    }

SQLite 是另一个不错的选择。

于 2013-07-01T13:41:52.807 回答