登录:在去另一个活动应用程序后忘记了Facebook图片,并命名文本

Posted

技术标签:

【中文标题】登录:在去另一个活动应用程序后忘记了Facebook图片,并命名文本【英文标题】:Login: after going to another activity app forgot Facebook picture, and name text 【发布时间】:2015-06-04 17:09:35 【问题描述】:

我在我的 android 应用程序中使用 Facebook SDK 时遇到了两个问题。

    (已解决)在进行其他活动后,或重新打开应用程序。它不记得头像和名字(名字和姓氏)。

    如果您选择注销,它仍会显示您的姓名和图片。

如果有人可以帮助我,我会非常高兴。请提供代码 - 不要说只是这样做。谢谢!

public class Profile extends Activity 
/**
 * Called when the activity is first created.
 */

WebView web;
ArrayList<NavigationDrawerItem> listItems;
DrawerLayout drawerLayout;
ActionBarDrawerToggle drawerToggle;
ListView list;

private CallbackManager callbackManager;
private ProfilePictureView profilePictureView;
private TextView name;


       @Override
        public void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        FacebookSdk.sdkInitialize(getApplicationContext());
        setContentView(R.layout.activity_profile);
        callbackManager = CallbackManager.Factory.create();
        LoginButton loginButton = (LoginButton) findViewById(R.id.login_button);
        loginButton.setReadPermissions("public_profile", "email", "user_friends");
        final ProfilePictureView profilePictureView = (ProfilePictureView) findViewById(R.id.profilepic);
        final TextView name = (TextView) findViewById(R.id.name);

        final SharedPreferences sharedPrefs = getSharedPreferences("details", MODE_PRIVATE);
        //After referencing your Views, add this.
        String nameStr = sharedPrefs.getString("name", null);
        String idStr = sharedPrefs.getString("id", null);
        if(nameStr != null)
        
            name.setText(nameStr);
        
        if(idStr != null)
        
            profilePictureView.setProfileId(idStr);
        
        //.. Do the same for other profile data


        loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() 

            @Override
            public void onSuccess(LoginResult loginResult) 
                AccessToken accessToken = loginResult.getAccessToken();
                com.facebook.Profile profile = com.facebook.Profile.getCurrentProfile();
                profilePictureView.getProfileId();
                profilePictureView.setProfileId(profile.getId());
                name.setText(profile.getName());

                SharedPreferences.Editor editor = sharedPrefs.edit();
                editor.putString("name", profile.getName());
                editor.putString("id", profile.getId());
                //.. Do the same for other profile data
                editor.commit();

            



            @Override
            public void onCancel() 
                // App code
            


            @Override
            public void onError(FacebookException exception) 
                // App code
                Log.i("Error", "Error");
            

        );


    

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) 
        callbackManager.onActivityResult(requestCode, resultCode, data);
    

【问题讨论】:

只有在点击登录按钮时才会调用登录回调。尝试使用SharedPreferences 来存储姓名和其他个人资料详细信息。 @siris_cac : 也许你可以提供一个答案,请提供更多信息:)? 【参考方案1】:

将详细信息存储在SharedPreferences 中并检索它们。

将此添加到您的onCreate()

SharedPreferences sharedPrefs = getSharedPreferences("details", MODE_PRIVATE);

在你的回调中添加onSuccess()

Editor editor = sharedPrefs.edit();
editor.putString("name", profile.getName());
editor.putString("id", profile.getId());
//.. Do the same for other profile data
editor.commit();

再次在您的onCreate() 中,

SharedPreferences sharedPrefs = getSharedPreferences("details", MODE_PRIVATE);
//After referencing your Views, add this.
String nameStr = sharedPrefs.getString("name", null);
String idStr = sharedPrefs.getString("id", null);
AccessToken token = AccessToken.getCurrentAccessToken();
if(token != null)

    if(nameStr != null)
    
       name.setText(nameStr);
    
    if(idStr != null)
    
       profilePictureView.setProfileId(id);
    
]
//.. Do the same for other profile data

【讨论】:

我对这一行有疑问:if(id != null) - 无法解析符号 id。已使用您发布的代码更新了我的问题。 对不起。它应该是 idStr。检查更新的答案。 这个profilePictureView.setProfileId(id);应该是 profilePictureView.setProfileId(idStr); . (我已经编辑了我的答案。)问题 1 现已解决。数字 2 仍然存在问题。 更新了答案。请在询问之前做一些研究。这些问题很常见。 :) 很抱歉问这个问题 - 但我真的卡住了。查找符号会话似乎存在问题,并且方法 isOpened 无法解决。我已经导入:import com.facebook.Session;

以上是关于登录:在去另一个活动应用程序后忘记了Facebook图片,并命名文本的主要内容,如果未能解决你的问题,请参考以下文章

Android 谷歌云视觉 API 获取 Json 并使用 Json 去另一个活动

java 去另一个活动

一段时间后滞后 Android 应用

如何使用azure活动目录b2c覆盖忘记密码的调用功能

zblogPHP后台登录密码忘记了怎么办

深入理解AD域登录过程(此文章是其他地方的,忘记出处)