当用户单击生成按钮时生成 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();
        }
    });