首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android: sharedPreference片段,而不是从类读取数据

Android: sharedPreference片段,而不是从类读取数据
EN

Stack Overflow用户
提问于 2020-04-05 09:04:57
回答 3查看 45关注 0票数 0

我为SharedPref工作准备了这门课

代码语言:javascript
复制
package com.box.a100rados.Data;

import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;

import static android.content.Context.MODE_PRIVATE;


public class UserAccessSession {

    private SharedPreferences sharedPref;
    private Editor editor;


    private static final String FILTER_RADIUS_DISTANCE      = "FILTER_RADIUS_DISTANCE";
    private static final String Name = "Name";
    private static final String Photo = "Photo";
    private static final String Rank = "Rank";
    private static final String Sid = "Sid";
    private static final String Ban = "Ban";
    private static final String Latitude = "Latitude";
    private static final String Longitude = "Longitude";

    private static final String SHARED = "UserData";
    private static UserAccessSession instance;

    public static UserAccessSession getInstance(Context context) {
        if(instance == null)
            instance = new UserAccessSession(context);
        return instance;
    }

    public UserAccessSession(Context context) {
        sharedPref = context.getSharedPreferences(SHARED, MODE_PRIVATE);
        editor = sharedPref.edit();
    }

    public void storeUserSession(UserSession session) {
        editor.putString(Name, session.getUsername());
        editor.putString(Photo, session.getPhoto_url());
        editor.putInt(Rank, session.getUser_Rank());
        editor.putString(Sid, session.getUser_id());
        editor.putBoolean(Ban, session.getUser_Ban());
        editor.putString(Latitude, session.getLatitude());
        editor.putString(Longitude, session.getLongitude());
        editor.apply();
    }

    public void clearUserSession() {
        editor.putString(Name, null);
        editor.putString(Photo, null);
        editor.putInt(Rank, 1);
        editor.putString(Sid, null);
        editor.putBoolean(Ban, false);
        editor.putString(Latitude, null);
        editor.putString(Longitude, null);
        editor.apply();
    }

    public UserSession getUserSession() {
        UserSession session = new UserSession();
        session.setUsername( sharedPref.getString(Name, null) );
        session.setPhoto_url( sharedPref.getString(Photo, null) );
        session.setUser_Rank( sharedPref.getInt(Rank, 1) );
        session.setUser_id( sharedPref.getString(Sid, "") );
        session.setUser_Ban( sharedPref.getBoolean(Ban, false) );
        session.setLatitude(sharedPref.getString(Latitude,"59.946104"));
        session.setLongitude(sharedPref.getString(Longitude,"30.306048"));
        return session;
    }

    public void setFilterDistance(float radius) {
        editor.putFloat(FILTER_RADIUS_DISTANCE, radius);
        editor.commit();
    }

    public float getFilterDistance() {
        return  sharedPref.getFloat(FILTER_RADIUS_DISTANCE, 0);
    }
}

我怎么称呼:

代码语言:javascript
复制
UserAccessSession tes = UserAccessSession.getInstance(getActivity().getApplicationContext());
                UserSession test = tes.getUserSession();

但在test.getLatitude()test.getLongitude()中,我有空值。在使用getUser_RankgetUsername或其他值的主活动中,有时也会发生同样的情况。我做错了什么,该如何解决呢?在地图上,在重新打开后,我从SharedPref获得数据,并且地图摄像机移动到我需要的地方。

我添加这样的数据

代码语言:javascript
复制
UserSession userSession = new UserSession();
                UserAccessSession session = UserAccessSession.getInstance(MainActivity.this);
                String sid = User_SID;
                userSession.setUsername(UserName);
                userSession.setPhoto_url(Photo_URL);
                userSession.setUser_Rank(Rank);
                userSession.setUser_id(sid);
                session.storeUserSession(userSession);

我添加的坐标如下:

代码语言:javascript
复制
userAccess = UserAccessSession.getInstance(MainActivity.this);
                userSession = userAccess.getUserSession();
                userSession.setLatitude(String.valueOf(location.getLatitude()));
                userSession.setLongitude(String.valueOf(location.getLongitude()));
                userAccess.storeUserSession(userSession);

谢谢你的帮助。我为可能重复这个问题而道歉。我英语说得不好,很难找到信息。

EN

回答 3

Stack Overflow用户

发布于 2020-04-05 09:27:32

我想,由于您访问的是来自不同的来源,问题会发生。

使用默认的共享首选项,它使用单个文件来存储,而不是使用不同的文件。

替换此context.getSharedPreferences(SHARED, MODE_PRIVATE);

用这个PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext());

票数 1
EN

Stack Overflow用户

发布于 2020-04-05 09:22:30

更改设置为获取

代码语言:javascript
复制
    public UserSession getUserSession() {
     UserSession session = new UserSession();
    session.getUsername( sharedPref.getString(Name, null) );
    session.getPhoto_url( sharedPref.getString(Photo, null) );
    session.getUser_Rank( sharedPref.getInt(Rank, 1) );
    session.getUser_id( sharedPref.getString(Sid, "") );
    session.getUser_Ban( sharedPref.getBoolean(Ban, false) );
    session.getLatitude(sharedPref.getString(Latitude,"59.946104"));
    session.getLongitude(sharedPref.getString(Longitude,"30.306048"));
    return session;
}
票数 0
EN

Stack Overflow用户

发布于 2020-04-05 11:04:26

我太傻了。

代码语言:javascript
复制
userAccess = UserAccessSession.getInstance(MainActivity.this);
                userSession = userAccess.getUserSession();
                userSession.setLatitude(String.valueOf(location.getLatitude()));
                userSession.setLongitude(String.valueOf(location.getLongitude()));
                userAccess.storeUserSession(userSession);

此呼叫清除了现有数据。把坐标转换成单独的方法,一切正常。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61040252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档