0

Ich versuche, die SharedPreferences in einem Fragment zu implementieren. Ich versuche, die Details des angemeldeten Benutzers anzuzeigen. Ich habe jedoch Probleme, es auf dem Konto Fragment anzuzeigen. Keine Probleme beim Anzeigen von SharedPreferences in der MainActivity. Ich suche nach einer Lösung, wie man den Code bedient, damit es in einem Fragment funktioniert.SharedPreferences in einem 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()); 

In diesem AccountFragment Ich versuche, die Kontodaten anzuzeigen.

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()); 

} 

Antwort

0

Sie haben einen nicht erreichbaren Code in Ihrem onCreateView - Sie View-Objekt in erster Linie zurückkehren. Sie sollten etwas in der Art haben:

@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

Nun, das könnte funktionieren, weil es für mich funktioniert. Ich spare es im Fragmente mit:

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

Dann bekomme ich sie in mainactivity mit:

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

Ich sehe nicht, warum es nicht in umgekehrter Richtung funktionieren soll.

0

Ich würde empfehlen, die Standard-Gemeinschafts-Einstellungen verwenden, wenn Sie wirklich nichts anderes tun müssen:

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

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

dann den Wert abzurufen:

SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(getContext()); 
String storedValue = sharedPrefs.getString("key", "defaultValue");