【问题标题】:Store Fb user data in session and use in another activity android在会话中存储 Fb 用户数据并在另一个活动 android 中使用
【发布时间】:2017-09-30 17:21:00
【问题描述】:

我正在使用 Facebook 登录,在登录活动屏幕成功登录后移动到主活动。我想在主要活动中显示 Facebook 用户详细信息,例如姓名、电子邮件、位置、性别、fbid。我在SharedPreferences 的帮助下将数据存储在会话中。现在我想在我的主要活动中使用会话值。我正在尝试HashMap,但它仅适用于 2 个值。下面是我的登录活动

fbloginbtn.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {

                GraphRequest request = GraphRequest.newMeRequest(
                        loginResult.getAccessToken(),
                        new GraphRequest.GraphJSONObjectCallback() {

                            @Override
                            public void onCompleted(JSONObject object, GraphResponse response) {
                                Log.v("Main", response.toString());
                                setProfileToView(object);
                            }
                        });
                Bundle parameters = new Bundle();
                parameters.putString("fields", "id,name,email,gender,birthday,location");
                request.setParameters(parameters);
                request.executeAsync();


                session.setFblogin(true);

                Intent i = new Intent(LoginActivity.this,MainActivity.class);
                startActivity(i);
                finish();
            }

private void setProfileToView(JSONObject jsonObject) {
        try {
            String fbemail= jsonObject.getString("email");
            String fbgender=jsonObject.getString("gender");
            String fbName= jsonObject.getString("name");
            String fbLocation=jsonObject.getString("location");
            String fbid = jsonObject.getString("id");

            profilePictureView.setPresetSize(ProfilePictureView.NORMAL);
            profilePictureView.setProfileId(jsonObject.getString("id"));

            String propic = "https://graph.facebook.com/" + fbid+ "/picture?type=large";

            session.setFbLogin(fbid, fbName, propic, fbLocation, fbgender, fbemail);



        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

在 Session.java 中

 public class Session {
        private SharedPreferences sp;
        private SharedPreferences.Editor spEditor;


        public static final String KEY_FBUID ="Fbid";
        public static final String KEY_FBNAME ="Fbname";
        public static final String KEY_FBEMAIL="Fbemail";
        public static final String KEY_FBGEND ="Fbgend";
        public static final String KEY_FBPROPIC ="Fbpropic";
        public static final String KEY_FBLOCAT ="Fblocation";

        public Session(Context context) {
            sp = PreferenceManager.getDefaultSharedPreferences(context);

        }



       public boolean setFblogin(boolean status){
            spEditor= sp.edit();
            spEditor.putBoolean("fb_logged_in",status);
            spEditor.commit();
            return true;
        }

        public void setFbLogin(String fid, String fname, String fpropic, String fulocation, String fbgend,String fbemail){

            spEditor.putString("Fbid",fid);
            spEditor.putString("Fbname",fname);
            spEditor.putString("Fbpropic",fpropic);
            spEditor.putString("Fblocation",fulocation);
            spEditor.putString("Fbgend",fbgend);
            spEditor.putString("Fbemail",fbemail);
            spEditor.commit();
        }


        public HashMap<String, String> getfbUserDetails(){
            HashMap<String, String> user = new HashMap<String, String>();
            // user name
            user.put(KEY_FBUID, sp.getString(KEY_FBUID, null));
            user.put(KEY_FBNAME, sp.getString(KEY_FBNAME, null));
            user.put(KEY_FBEMAIL, sp.getString(KEY_FBEMAIL, null));
            user.put(KEY_FBLOCAT, sp.getString(KEY_FBLOCAT, null));
            user.put(KEY_FBPROPIC, sp.getString(KEY_FBPROPIC, null));
            return user;
        }

在我的主要活动中,我想使用getfbuserDetails() 并获取会话存储的值。但 HashMap 不起作用。

如有任何疑问,请发表评论。

【问题讨论】:

  • 您的共享偏好构造函数在哪里使用?
  • 您可以将图形数据存储到 json 对象中,然后将其存储在共享首选项中
  • but HashMap is not working. 是否显示任何错误?不工作是什么意思?将MainActivity 的代码也发布到您要获取值的地方
  • 它适用于 2 个值,但如果我想获得更多,则 2 个不工作

标签: java android facebook session


【解决方案1】:

2种方法

1.保存数据Json格式字符串不转换对象。在将json转换为对象(使用Gson)后获取json(String)之前获取数据时

2.这里https://github.com/pilgr/Paper

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多