I am working on an function that adds strings from firebase database into an existing spinner. At the moment I have 2 spinners with the first spinner taking froms from strings.xml file and the other spinner takes item from firebase. The problem is that when I select either of them they overwirte each other and the sharedPreferneces are also overwritten. My question is how would I implement adding the firebase array "array" of keys into the spinner that has the strings.xml? Thanks in advance
PS. another problem is onPause and onResume and onBackpressed clears te saredPrefs
Update:
public class HomeActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener{
private ZXingScannerView scannerView;
private final int permission_code = 1;
String [] selectedProfile;
Spinner spinner;
ArrayAdapter<CharSequence> adapter;
Spinner spinnerUser;
Map<String,Object> map;
private String userID;
private FirebaseDatabase mFirebaseDatabase;
private FirebaseAuth mAuth;
private FirebaseAuth.AuthStateListener mAuthListener;
private DatabaseReference myRef;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
mAuth = FirebaseAuth.getInstance();
mFirebaseDatabase = FirebaseDatabase.getInstance();
myRef = mFirebaseDatabase.getReference();
FirebaseUser user = mAuth.getCurrentUser();
userID = user.getUid();
if(mAuth.getCurrentUser() == null){
finish();
startActivity(new Intent(this, MainActivity.class));
}
startSpinner();
}
public void startSpinner(){
//built in Profiles
spinner = (Spinner) findViewById(R.id.spinnerProfiles);
adapter = ArrayAdapter.createFromResource(this, R.array.restrictions, android.R.layout.simple_spinner_item);
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// This method is called once with the initial value and again
// whenever data at this location is updated.
map = (Map<String, Object>) dataSnapshot.child("users").child(userID).getValue();
ArrayList<String> array = new ArrayList<>();
int x = 16;
for (Map.Entry<String,Object> entry : map.entrySet()) {
// key contains Profile Name
String key = entry.getKey();
adapter.insert(key, x);
x++;
}
adapter.setDropDownViewResource(android.R.layout.simple_list_item_1);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(HomeActivity.this);
}
@Override
public void onCancelled(DatabaseError databaseError) {
//Auto Generated Method
}
});
}
//restores spinner object
public void restoreSpinner(){
SharedPreferences sharedPref = getSharedPreferences("Preferences",MODE_PRIVATE);
int profileVal = sharedPref.getInt("userProfile",-1);
if(profileVal != -1) {
spinner.setSelection(profileVal);
}
}
//selects an item from the spinner and passes it to InformationActivity
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
//Saves spinner value
int profileVal = spinner.getSelectedItemPosition();
SharedPreferences sharedPref = getSharedPreferences("Preferences", 0);
SharedPreferences.Editor prefEditor = sharedPref.edit();
prefEditor.putInt("userProfile", profileVal);
prefEditor.apply();
switch (profileVal) {
case 0:
break;
case 1:
selectedProfile = getResources().getStringArray(R.array.Wheat);
break;
case 2:
selectedProfile = getResources().getStringArray(R.array.Crustaceans);
break;
case 3:
selectedProfile = getResources().getStringArray(R.array.Eggs);
break;
default:
String text = spinner.getSelectedItem().toString();
map.get(text);
ArrayList<String> array = new ArrayList<>();
for (Map.Entry<String, Object> entry : map.entrySet()) {
//Key contains Profile name
String key = entry.getKey();
if (key.equals(text)) {
// value is the corresponding list
Object value = entry.getValue();
array.addAll((ArrayList) value);
}
}
//set the selected profile
selectedProfile = array.toArray(new String[0]);
}
}
}