#java #android #android-fragments #fragment
#java #Android #android-фрагменты #фрагмент
Вопрос:
Я пытаюсь реализовать SharedPreferences во фрагменте. Я пытаюсь отобразить сведения о вошедшем в систему пользователе. Однако у меня возникают проблемы с отображением их во фрагменте учетной записи. Нет проблем при отображении SharedPreferences в MainActivity. Я ищу решение относительно того, как обработать код, чтобы он работал во фрагменте.
MainActivity.java
sessionManager = new SessionManager(MainActivity.this);
if (!sessionManager.isLoggedIn()){
moveToLogin();
}
etIndeks = findViewById(R.id.edt_indeks);
etEmail = findViewById(R.id.edt_kataSandi);
В IndekFragment отображать данные из prefences
IndekFragment.java
package com.kedaiit.ggf.fragment;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import androidx.fragment.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.kedaiit.ggf.LoginActivity;
import com.kedaiit.ggf.MainActivity;
import com.kedaiit.ggf.R;
import com.kedaiit.ggf.SessionManager;
import com.kedaiit.ggf.model.login.LoginData;
public class indekFragment extends Fragment {
TextView etEmail, etIndeks;
SessionManager sessionManager;
String indeks, email;
public indekFragment(){
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_indek, container, false);
if (!sessionManager.getUserDetail().get(LoginData)){
startActivity(new Intent(getContext(), LoginActivity.class));
}
etIndeks = (TextView) view.findViewById(R.id.edt_indeks);
etEmail = (TextView) view.findViewById(R.id.edt_email);
etIndeks.setText(SessionManager.INDEKS);
etEmail.setText(SessionManager.EMAIL);
return view;
}
}
SessionManager.java
package com.kedaiit.ggf;
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.service.autofill.UserData;
import com.kedaiit.ggf.fragment.indekFragment;
import com.kedaiit.ggf.model.login.LoginData;
import java.util.HashMap;
public class SessionManager {
private Context _context;
private SharedPreferences sharedPreferences;
private SharedPreferences.Editor editor;
public static final String IS_LOGGED_IN = "isLoggedIn";
public static final String INDEKS = "indeks";
public static final String HP = "hp";
public static final String EMAIL = "email";
public static final String TANGGAL_DAFTAR = "tanggal_daftar";
public static final String FOTO = "foto";
public static final String ID_STATUS = "status";
public static final String ID_SESI = "id_sesi";
public static final String LASTLOGIN = "lastlogin";
public static final String HOST = "host";
public SessionManager (Context context){
this._context = context;
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
editor = sharedPreferences.edit();
}
// public SessionManager(indekFragment indekFragment) {
//
// }
public void createLoginSession(LoginData user){
editor.putBoolean(IS_LOGGED_IN, true);
editor.putString(INDEKS, user.getIndeks());
editor.putString(HP, user.getHp());
editor.putString(EMAIL, user.getEmail());
editor.putString(TANGGAL_DAFTAR, user.getTanggalDaftar());
editor.putString(FOTO, user.getFoto());
editor.putString(ID_STATUS, user.getStatus());
editor.putString(ID_SESI, user.getIdSesi());
editor.putString(LASTLOGIN, user.getLastlogin());
editor.putString(HOST, user.getHost());
editor.commit();
}
public HashMap<String,String> getUserDetail(){
HashMap<String,String> user = new HashMap<>();
user.put(INDEKS, sharedPreferences.getString(INDEKS,null));
user.put(HP, sharedPreferences.getString(HP,null));
user.put(EMAIL, sharedPreferences.getString(EMAIL,null));
user.put(TANGGAL_DAFTAR, sharedPreferences.getString(TANGGAL_DAFTAR, null));
user.put(FOTO, sharedPreferences.getString(FOTO, null));
user.put(ID_STATUS, sharedPreferences.getString(ID_STATUS, null));
user.put(ID_SESI, sharedPreferences.getString(ID_SESI, null));
user.put(LASTLOGIN, sharedPreferences.getString(LASTLOGIN, null));
user.put(HOST, sharedPreferences.getString(HOST, null));
return user;
}
public void logoutSession(){
editor.clear();
editor.commit();
}
public boolean isLoggedIn(){
return sharedPreferences.getBoolean(IS_LOGGED_IN, false);
}
// public UserData getUser(){
// SharedPreferences sharedPreferences = _context.getSharedPreferences(Context.MODE_PRIVATE);
// return new UserData(
// sharedPreferences.getString(INDEKS, null),
// sharedPreferences.getString(HP, null),
// sharedPreferences.getString(EMAIL, null),
// sharedPreferences.getString(TANGGAL_DAFTAR, null),
// sharedPreferences.getString(FOTO, null),
// sharedPreferences.getString(ID_STATUS, null),
// sharedPreferences.getString(ID_SESI, null),
// sharedPreferences.getString(LASTLOGIN, null),
// sharedPreferences.getString(HOST, null)
//
// );
// }
}
Ответ №1:
Вы не инициализировали SessionManager в своем фрагменте. Вы должны инициализировать так.
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_indek, container, false);
sessionManager = new SessionManager(getActivity()); //init session like this
if (!sessionManager.getUserDetail().get(LoginData)){
startActivity(new Intent(getContext(), LoginActivity.class));
}
etIndeks = (TextView) view.findViewById(R.id.edt_indeks);
etEmail = (TextView) view.findViewById(R.id.edt_email);
etIndeks.setText(SessionManager.INDEKS);
etEmail.setText(SessionManager.EMAIL);
return view;
}
Комментарии:
1. Ошибка не удается найти символ if(!SessionManager.getUserDetail().get(LoginData)){