Android 如何将数据附加到现有共享首选项文件

Android 如何将数据附加到现有共享首选项文件,android,Android,如果我有一个名为“myshared”的切碎首选项文件,我如何才能将数据附加到它而不是覆盖它 我需要建立一个注册系统,我想使用SharedPreferences而不是外部文件保存每个新用户数据(用户名和密码)。我与每个新用户数据的问题总是myshared.xml被覆盖 我已经回复了我的帖子: 我试图解决这个问题,每次都用不同的Id创建一个新的xml文件这是我的 编辑我的帖子: package com.example.task_8; import java.io.File; import an

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


我需要建立一个注册系统,我想使用SharedPreferences而不是外部文件保存每个新用户数据(用户名和密码)。我与每个新用户数据的问题总是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);


                    }


                }

            });

}

}

我查看了SharedReferences文档,为您找到了一个选项

您可以使用将
Set
添加到首选项中,因此您必须将一组用户名和密码保存到SharedReferences,这样您就可以拥有登录历史记录

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

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

创建:

    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是另一个很好的选择。

你能澄清你的意图吗?我需要建立一个注册系统,我想使用SharedPreferences而不是外部文件保存每个新用户数据(用户名和密码)。我与每个新用户数据的问题总是myshared.xml被覆盖:(因此,多个用户可以在同一台设备上注册一个帐户?我想你应该如何使用ContentProvider如果你必须使用共享首选项,你必须为login1、2、3创建各种id,然后通过并检查你的代码中是否有。)