我对此非常陌生,并且在制作申请方面取得了稳步进展。我想创建一个应用程序,允许用户使用滑块生成随机密码来设置长度,然后生成。完成此操作后,我希望用户能够保存生成的密码。到目前为止,除了在应用程序关闭后保存要恢复的密码之外,我已经实现了所有目标。我已经阅读了很多帖子,我不知道如何在应用程序关闭后保存应用程序数据,将其置于文件或SharedPrefrences。非常感谢一些澄清和帮助。
我想要实现的目标
我想要一个用户点击的按钮和他们生成的密码(存储在该数组中)保存在应用程序中,然后当他们关闭它并稍后返回时他们可以检索这些保存的密码。
感谢所有先进的人,我请原谅我的代码可能非常凌乱,但我正在学习:D
由于
-Jack
主要活动XML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.jrfapplications.passgen.MainActivity">
<SeekBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/passdesc"
android:layout_marginTop="27dp"
android:id="@+id/seekBar"
android:max="20"
android:progress="10"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
<Button
android:text="@string/passbutton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button"
android:textSize="12sp"
android:onClick="genpass"
android:layout_marginTop="40dp"
android:layout_below="@+id/seekBar"
android:layout_centerHorizontal="true" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/seekBar"
android:layout_centerHorizontal="true"
android:text="@string/SeekValueView"
android:id="@+id/SeekTextView" />
<TextView
android:text="@string/pass_desc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="@dimen/pass_desc_size"
android:id="@+id/passdesc"
android:textAlignment="center"
android:layout_marginTop="122dp"
android:layout_below="@+id/password"
android:layout_centerHorizontal="true" />
<TextView
android:text="@string/password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/password"
android:textSize="@dimen/password"
android:layout_marginTop="86dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />
<Button
android:text="@string/NextPageText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/button"
android:id="@+id/button2"
android:layout_alignLeft="@+id/button"
android:layout_alignStart="@+id/button"
android:layout_alignRight="@+id/button"
android:layout_alignEnd="@+id/button"
android:onClick="goToSavedPassActivity"
android:textSize="12sp" />
</RelativeLayout>
主要活动Java:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final TextView mPassword;
Button mGenPassButton; //Defining Variables
final TextView mSeekBarValue;
Button mSavedPassActivity;
mPassword = (TextView) findViewById(R.id.password);
mGenPassButton = (Button) findViewById(R.id.button); //Settings values and locations
mSeekBarValue = (TextView) findViewById(R.id.SeekTextView);
SeekBar seek=(SeekBar) findViewById(R.id.seekBar);
mSavedPassActivity = (Button) findViewById(R.id.button2);
seek.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { //Seekbar Actions
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) { //When user moves it
// TODO Auto-generated method stub
SeekBarValue.seekval = progress;
mSeekBarValue.setText(String.valueOf(progress));
}
});
mSavedPassActivity.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this, SavedPassActivity.class));
}
});
mGenPassButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
char[] chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890".toCharArray();
final StringBuilder sb = new StringBuilder();
Random random = new Random();
for (int i = 0; i < SeekBarValue.seekval; i++) {
char c = chars[random.nextInt(chars.length)];
sb.append(c);
}
final String output = sb.toString();
mPassword.setText(output);
SavedPassArray.SavedPasswords.add(output);
}
});
}
}
SeekBarValue Java:
public class SeekBarValue {
public static int seekval;
}
SavedPassedArray Java:
public class SeekBarValue {
public static int seekval;
}
ViewPasswordActivity ScreenShot
密码查看活动XML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_saved_pass"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.jrfapplications.passgen.SavedPassActivity">
<TextView
android:text="@string/PassList"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/PasswordsList"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:textSize="18sp"
android:scrollbars="vertical"
android:textStyle="normal|bold" />
</RelativeLayout>
密码查看Java:
public class SavedPassActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_saved_pass);
final TextView mPasswordsLists;
mPasswordsLists = (TextView) findViewById(R.id.PasswordsList);
StringBuilder allpasswords = new StringBuilder();
for (String s : SavedPasswords ){
if(allpasswords.length() > 0){
allpasswords.append("\n");
}
allpasswords.append(s); }
mPasswordsLists.setText(allpasswords.toString());
mPasswordsLists.setMovementMethod(new ScrollingMovementMethod());
//for(int i=0; i < SavedPasswords.size(); i++){
}
}
答案 0 :(得分:0)
您可以将数据保存在SharedPreferences
//创建共享首选项
SharedPreferences.Editor prefsEditor = getSharedPreferences("User", MODE_PRIVATE).edit();
prefsEditor.putString("User", Name);
prefsEditor.putString("Password", password);
prefsEditor.commit();
此处,Name
是包含用户名的veriable password
包含要存储的密码
阅读数据
SharedPreferences prefs = getSharedPreferences("User", MODE_PRIVATE);
String Name = prefs.getString("Name", null);
String password = prefs.getString("Password", null);
null很重要,如果条目Name
不存在,那么它将返回null。如果你输入&#34; Guest&#34;而不是null,然后它将返回&#34; Guest&#34;当Name
不存在时。
答案 1 :(得分:0)
使用Json,
像这样创建JsonObeject,
try {
JSONObject user = new JSONObject();
user.put("Id","Id of the user");
user.put("Name","name of the user");
user.put("Password","password for the user");
} catch (JSONException e) {
e.printStackTrace();
}
然后将每个用户添加到jsonArray
try {
JSONObject object = new JSONObject();
object.put("Id","Id of the user");
object.put("Name","name of the user");
object.put("Password","password for the user");
JSONArray array = new JSONArray();
array.put(object);
} catch (JSONException e) {
e.printStackTrace();
}
您可以将数组保存在SharedPreferences
中//创建共享首选项
SharedPreferences.Editor prefsEditor = getSharedPreferences("User", MODE_PRIVATE).edit();
prefsEditor.putString("Users", array.toString());
prefsEditor.commit();
读取数组
SharedPreferences prefs = getSharedPreferences("User", MODE_PRIVATE);
String arrayString = prefs.getString("Users", null);
将字符串转换为jsonArray
JSONArray array = new JSONArray(arrayString);
在这里,您可以显示所有具有ID,名称和密码的用户
try {
for (int i = 0; i < array.length(); i++) {
JSONObject user = array.getJSONObject(i);
textViewId.setText(user.getString("Id"));
textViewName.setText(user.getString("Name"));
textViewPassword.setText(user.getString("Password"));
}
} catch (JSONException e) {
e.printStackTrace();
}
你可以用这样的ID搜索用户,
try {
for (int i = 0; i < array.length(); i++) {
JSONObject user = array.getJSONObject(i);
if (user.getString("Id").equals("Required Id")) {
textViewId.setText(user.getString("Id"));
textViewName.setText(user.getString("Name"));
textViewPassword.setText(user.getString("Password"));
break;
}
}
} catch (JSONException e) {
e.printStackTrace();
}
您可以使用名称来搜索用户,
try {
for (int i = 0; i < array.length(); i++) {
JSONObject user = array.getJSONObject(i);
if (user.getString("Name").equals("Required Name")) {
textViewId.setText(user.getString("Id"));
textViewName.setText(user.getString("Name"));
textViewPassword.setText(user.getString("Password"));
break;
}
}
} catch (JSONException e) {
e.printStackTrace();
}
希望它有所帮助!!!