J'essaye d'implémenter les SharedPreferences dans un fragment. J'essaye d'afficher les détails de l'utilisateur connecté. Cependant, j'ai du mal à l'afficher sur le compte Fragment. Aucun problème lors de l'affichage des SharedPreferences dans MainActivity. Je recherche une solution sur la façon de gérer le code afin qu'il fonctionne dans un fragment.

MainActivity.java

if(!SharedPrefManager.getInstance(this).isLoggedIn()){
            finish();
            startActivity(new Intent(this, LoginActivity.class));
        }
        textviewUsername = (TextView)findViewById(R.id.usernameLabel);
        textviewUsername.setText(SharedPrefManager.getInstance(this).getUsername());

Dans ce AccountFragment, j'essaye d'afficher les détails du compte.

AccountFragment.java

public class AccountFragment extends Fragment {
private TextView textViewUsername, textViewEmail, textViewFirstName, textViewLastName;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
   return inflater.inflate(R.layout.fragment_account, container, false);

    if(!SharedPrefManager.getInstance(getContext()).isLoggedIn()) {
        startActivity(new Intent(getContext(), LoginActivity.class));
    }

        textViewUsername = (TextView) getView().findViewById(R.id.editTextUsername);
        textViewEmail = (TextView) getView().findViewById(R.id.editTextEmail);
        textViewFirstName = (TextView) getView().findViewById(R.id.editTextFirstName);
        textViewLastName = (TextView) getView().findViewById(R.id.editTextLastName);


        textViewUsername.setText(SharedPrefManager.getInstance(getActivity()).getUsername());
        textViewEmail.setText(SharedPrefManager.getInstance(getActivity()).getEmail());
        textViewFirstName.setText(SharedPrefManager.getInstance(getActivity()).getFirstName());
        textViewLastName.setText(SharedPrefManager.getInstance(getActivity()).getLastName());

}
0
Eugelito 20 avril 2017 à 01:10

3 réponses

Meilleure réponse

Vous avez un code inaccessible dans votre onCreateView - vous renvoyez l'objet View en première ligne. Vous devriez avoir quelque chose comme ça:

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
   View view = inflater.inflate(R.layout.fragment_account, container, false);

    if(!SharedPrefManager.getInstance(getContext()).isLoggedIn()) {
        startActivity(new Intent(getContext(), LoginActivity.class));
    }

    textViewUsername = (TextView) view.findViewById(R.id.editTextUsername);
    textViewEmail = (TextView) view.findViewById(R.id.editTextEmail);
    textViewFirstName = (TextView) view.findViewById(R.id.editTextFirstName);
    textViewLastName = (TextView) view.findViewById(R.id.editTextLastName);

    textViewUsername.setText(SharedPrefManager.getInstance(getActivity()).getUsername());
    textViewEmail.setText(SharedPrefManager.getInstance(getActivity()).getEmail());
    textViewFirstName.setText(SharedPrefManager.getInstance(getActivity()).getFirstName());
    textViewLastName.setText(SharedPrefManager.getInstance(getActivity()).getLastName());

    return view;
}
0
pablo432 19 avril 2017 à 22:22

Eh bien, cela pourrait fonctionner parce que cela fonctionne pour moi. Je l'enregistre dans le fragment avec:

getActivity().getSharedPreferences(PREFS_NAME,MODE_PRIVATE)
                                .edit()
                                .putString(PREF_EMAIL, email)
                                .putString(PREF_PASSWORD, password)
                                .apply();

Ensuite, je les mets en activité principale avec:

SharedPreferences pref = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
    String email = pref.getString(PREF_EMAIL, null);
    String password = pref.getString(PREF_PASSWORD, null);

Je ne vois pas pourquoi cela ne devrait pas fonctionner en sens inverse.

0
Yousef 19 avril 2017 à 22:24

Je vous recommande d'utiliser les préférences partagées par défaut, sauf si vous devez vraiment faire autrement:

SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(getContext());
SharedPreferences.Editor editor = sharedPrefs.edit();

editor.putString("key", "value");
editor.apply();

Puis pour récupérer la valeur:

SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(getContext());
String storedValue = sharedPrefs.getString("key", "defaultValue");
0
Sammy T 19 avril 2017 à 22:25