当用户单击生成按钮时生成 N 个随机 4 位整数字符串和 7 字符字符串,当用户单击显示按钮时显示所有使用共享首选项
generate N random 4digit int string & 7char string when user clicks generate button & show all when user clicks show buttonUsing sharedpreferences
随机生成N个键和值。我测试了根据用户输入 N、LB 和 UB 生成称为键的 4 位字符串和称为值的 7 位字符串的代码。现在我想使用共享首选项显示键和值。当我 运行 我的项目时,它每次只显示 1 个键和值。也许我没有正确实现共享首选项。
这是我 main_activity.java
的代码
package com.rough.problem.problem6;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TableRow;
import java.util.Random;
public class MainActivity extends AppCompatActivity {
EditText n,lb,ub;
Button generate, show, quit;
String number;
String generatednum;
String random_string;
int length = 7;
int num,min,max;
SharedPreferences preferences = getSharedPreferences("temp", getApplicationContext().MODE_PRIVATE);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
n = (EditText) findViewById(R.id.num);
lb = (EditText) findViewById(R.id.lowerbound);
ub = (EditText) findViewById(R.id.upperbound);
generate= (Button) findViewById(R.id.Generate);
show = (Button) findViewById(R.id.Show);
quit = (Button) findViewById(R.id.Quit);
generate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
num = Integer.parseInt(n.getText().toString());
min = Integer.parseInt(lb.getText().toString());
max = Integer.parseInt(ub.getText().toString());
for (int i = 1; i <= num; i++) {
Random random = new Random();
generatednum = String.format("%04d", random.nextInt(max + 1 - min) + min);
// Key.append(generatednum + "\n");
char[] chars1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
StringBuilder sb1 = new StringBuilder();
Random random1 = new Random();
for (int j = 0; j < length; j++)
{
char c1 = chars1[random1.nextInt(chars1.length)];
sb1.append(c1);
}
random_string = sb1.toString();
// Value.append(random_string + "\n");
// editor.commit();
}
SharedPreferences.Editor editor = preferences.edit();
editor.putString("key", generatednum);
editor.putString("value",random_string);
}
});
show.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent keyIntent = new Intent(MainActivity.this, key.class);
MainActivity.this.startActivity(keyIntent);
startActivity(keyIntent);
}
});
}
}
以及 key.java 的代码,它应该显示使用共享首选项生成的键和值。
package com.rough.problem.problem6;
import android.content.Intent;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;
import java.util.Random;
public class key extends AppCompatActivity {
Button Back;
TextView Key, Value;
int n,lb,ub;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_key);
Back = (Button) findViewById(R.id.back);
Key = (TextView) findViewById(R.id.key);
Value = (TextView) findViewById(R.id.value);
SharedPreferences preferences=getSharedPreferences("temp", getApplicationContext().MODE_PRIVATE);
String key = preferences.getString("key",null);
String value = preferences.getString("value",null);
Key.append(key + "\n");
Value.append(value + "\n");
}
}
这是我的主要activity gui
这是 Key.java activity 屏幕截图
它只显示 1 个键和值我需要帮助。
它只显示一个 Key 和 Value,因为你只存储一个 Key 和 Value。虽然您的 for
循环确实生成了 n 个键和值,但您的 SharedPreferences
代码最后在循环之外,因此仅存储最后生成的键和值。由于您似乎希望将所有键存储在一个 SharedPreferences
字符串中,将所有值存储在另一个 SharedPreferences
字符串中,因此可以通过向生成按钮的 OnClickListener
添加几个变量来解决这个问题:
generate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
num = Integer.parseInt(n.getText().toString());
min = Integer.parseInt(lb.getText().toString());
max = Integer.parseInt(ub.getText().toString());
// This will be the Key String we store in SharedPrefs
String keyString = "";
// This will be the Value String we store in SharedPrefs
String valueString = "";
for (int i = 1; i <= num; i++) {
Random random = new Random();
generatednum = String.format("%04d", random.nextInt(max + 1 - min) + min);
// Append the generated Key to the keyString
keyString = keyString + generatednum + "\n";
char[] chars1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
StringBuilder sb1 = new StringBuilder();
Random random1 = new Random();
for (int j = 0; j < length; j++)
{
char c1 = chars1[random1.nextInt(chars1.length)];
sb1.append(c1);
}
random_string = sb1.toString();
// Append the generated Value to the valueString
valueString = valueString + random_string + "\n";
}
// Store our keyString and valueString in SharedPrefs
SharedPreferences.Editor editor = preferences.edit();
editor.putString("key", keyString);
editor.putString("value", valueString);
// Don't forget to commit your changes to SharedPrefs!
editor.commit();
}
});
随机生成N个键和值。我测试了根据用户输入 N、LB 和 UB 生成称为键的 4 位字符串和称为值的 7 位字符串的代码。现在我想使用共享首选项显示键和值。当我 运行 我的项目时,它每次只显示 1 个键和值。也许我没有正确实现共享首选项。
这是我 main_activity.java
package com.rough.problem.problem6;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TableRow;
import java.util.Random;
public class MainActivity extends AppCompatActivity {
EditText n,lb,ub;
Button generate, show, quit;
String number;
String generatednum;
String random_string;
int length = 7;
int num,min,max;
SharedPreferences preferences = getSharedPreferences("temp", getApplicationContext().MODE_PRIVATE);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
n = (EditText) findViewById(R.id.num);
lb = (EditText) findViewById(R.id.lowerbound);
ub = (EditText) findViewById(R.id.upperbound);
generate= (Button) findViewById(R.id.Generate);
show = (Button) findViewById(R.id.Show);
quit = (Button) findViewById(R.id.Quit);
generate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
num = Integer.parseInt(n.getText().toString());
min = Integer.parseInt(lb.getText().toString());
max = Integer.parseInt(ub.getText().toString());
for (int i = 1; i <= num; i++) {
Random random = new Random();
generatednum = String.format("%04d", random.nextInt(max + 1 - min) + min);
// Key.append(generatednum + "\n");
char[] chars1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
StringBuilder sb1 = new StringBuilder();
Random random1 = new Random();
for (int j = 0; j < length; j++)
{
char c1 = chars1[random1.nextInt(chars1.length)];
sb1.append(c1);
}
random_string = sb1.toString();
// Value.append(random_string + "\n");
// editor.commit();
}
SharedPreferences.Editor editor = preferences.edit();
editor.putString("key", generatednum);
editor.putString("value",random_string);
}
});
show.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent keyIntent = new Intent(MainActivity.this, key.class);
MainActivity.this.startActivity(keyIntent);
startActivity(keyIntent);
}
});
}
}
以及 key.java 的代码,它应该显示使用共享首选项生成的键和值。
package com.rough.problem.problem6;
import android.content.Intent;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;
import java.util.Random;
public class key extends AppCompatActivity {
Button Back;
TextView Key, Value;
int n,lb,ub;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_key);
Back = (Button) findViewById(R.id.back);
Key = (TextView) findViewById(R.id.key);
Value = (TextView) findViewById(R.id.value);
SharedPreferences preferences=getSharedPreferences("temp", getApplicationContext().MODE_PRIVATE);
String key = preferences.getString("key",null);
String value = preferences.getString("value",null);
Key.append(key + "\n");
Value.append(value + "\n");
}
}
这是我的主要activity gui
这是 Key.java activity 屏幕截图
它只显示 1 个键和值我需要帮助。
它只显示一个 Key 和 Value,因为你只存储一个 Key 和 Value。虽然您的 for
循环确实生成了 n 个键和值,但您的 SharedPreferences
代码最后在循环之外,因此仅存储最后生成的键和值。由于您似乎希望将所有键存储在一个 SharedPreferences
字符串中,将所有值存储在另一个 SharedPreferences
字符串中,因此可以通过向生成按钮的 OnClickListener
添加几个变量来解决这个问题:
generate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
num = Integer.parseInt(n.getText().toString());
min = Integer.parseInt(lb.getText().toString());
max = Integer.parseInt(ub.getText().toString());
// This will be the Key String we store in SharedPrefs
String keyString = "";
// This will be the Value String we store in SharedPrefs
String valueString = "";
for (int i = 1; i <= num; i++) {
Random random = new Random();
generatednum = String.format("%04d", random.nextInt(max + 1 - min) + min);
// Append the generated Key to the keyString
keyString = keyString + generatednum + "\n";
char[] chars1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
StringBuilder sb1 = new StringBuilder();
Random random1 = new Random();
for (int j = 0; j < length; j++)
{
char c1 = chars1[random1.nextInt(chars1.length)];
sb1.append(c1);
}
random_string = sb1.toString();
// Append the generated Value to the valueString
valueString = valueString + random_string + "\n";
}
// Store our keyString and valueString in SharedPrefs
SharedPreferences.Editor editor = preferences.edit();
editor.putString("key", keyString);
editor.putString("value", valueString);
// Don't forget to commit your changes to SharedPrefs!
editor.commit();
}
});