Отображение общих предпочтений данных во фрагменте

#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)){