gpt4 book ai didi

java - 使用 SharedPreferences 在 Android 应用程序中保存 String[][] 数组

转载 作者:行者123 更新时间:2023-12-01 12:50:12 25 4
gpt4 key购买 nike

我已阅读该主题的相关帖子,但无法解决我的问题。请看一下我的代码,让我知道问题出在哪里。

我想在我的应用程序中创建一个 String[10][2] 数组,因此每当我的应用程序启动时,它都会检索该数组并对其进行处理。该数组由用户名和与该用户名对应的密码组成。我想为新用户创建新密码并为已注册用户检索密码。

public class PasswordGeneration extends Activity {

private static final String charSet = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()_+=-/?";
private static Random rnd = new Random();
private String[][] globDataBase = new String[10][2];
private String password;
private String temp;
ImageButton buttonBack;
TextView setPass;
String name,genePass;





public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);

setContentView(R.layout.pass_result);
buttonBack=(ImageButton)findViewById(R.id.widget54);
setPass = (TextView)findViewById(R.id.widget51);

Bundle bundle = getIntent().getExtras();
name=bundle.getString("name");
name = "Amir";//for testing, this line should be omitted for real application
globDataBase = loadDataBase(this);
genePass = passwordGeneration(name, 12);
setPass.setText(genePass);


buttonBack.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {

finish();

}
});


}



public String passwordGeneration(String name, int len) {

for(int i = 0; i < 10; i++){
if(globDataBase[i][0] == name){
return globDataBase[i][1];

}

}
StringBuilder sb = new StringBuilder(len);
for(int j = 0; j < len; j++ )
sb.append(charSet.charAt(rnd.nextInt(charSet.length())));
password = sb.toString();
setDataBase(name, password);
return password;
}

public void setDataBase(String name, String password){

for (int i = 0; i < 10; i++){
if(globDataBase[i][0] == null){
globDataBase[i][0] = name;
globDataBase[i][1] = password;
break;
}
}
saveDataBase(globDataBase, this);
return;

}

public boolean saveDataBase(String[][] db, Context mContext){
SharedPreferences prefs = mContext.getSharedPreferences("dataBase", 0);
Editor editor = prefs.edit();
for(int i = 0; i < 10; i++){
for(int j = 0; j < 2; j++){
editor.putString("dataBase", db[i][j]);
}
}
return editor.commit();
}

public String[][] loadDataBase(Context mContext){
SharedPreferences prefs = mContext.getSharedPreferences("dataBase", 0);
String[][] dataBase = new String[10][2];
for(int i = 0; i < 10; i++){
for(int j = 0; j < 2; j++){
dataBase[i][j] = prefs.getString("dataBase", null);
}
}
return dataBase;
}
}

当我运行我的应用程序时,我得到用户名=“Amir”的密码,当我再次运行该应用程序时,我希望得到相同的密码,但我得到了一个同名“Amir”的新密码。我不知道问题出在哪里。

最佳答案

for(int i = 0; i < 10; i++){
for(int j = 0; j < 2; j++){
editor.putString("dataBase", db[i][j]);
}
}

这是错误的,因为您基本上是在循环并覆盖键“dataBase”的值。

我建议您寻找另一种方式来保存数据。如果您仍然想使用共享首选项,您可能最终会为每个元素创建多个键,如下所示:

for(int i = 0; i < 10; i++){
for(int j = 0; j < 2; j++){
editor.putString("dataBase["+i+"]["+j+"]", db[i][j]);
}
}

所以你将创建像“dataBase[0][1]”这样的条目,然后你需要逻辑来检索它们......但同样,对我来说这看起来不是最佳解决方案

关于java - 使用 SharedPreferences 在 Android 应用程序中保存 String[][] 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24280823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com