N keys and values are randomly generated. I tested the code which generates 4 digit string called keys and 7 character string called values based on the user input N, LB, and UB. Now I want to display keys and values using shared preference. When I run my project it only displays 1 key and value every time. Maybe I am not correctly implementing shared preferences.
This is my code for 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);
}
});
}
}
And the code for key.java where it should display the keys and values generated using shared preference.
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");
}
}
This is my main activity gui

and this is the Key.java activity screenshot

It only displays 1 key and value I need help.
It's only displaying one Key and Value because you're only storing one Key and Value. While your
forloop does generate n Keys and Values, yourSharedPreferencescode is outside of the loop at the end, so only the last generated Key and Value gets stored. Since it looks like you want to store all the Keys in oneSharedPreferencesString and all the Values in anotherSharedPreferencesString, this can be fixed by adding a couple variables to your Generate button'sOnClickListener: