Android保存共享首选项并获取用户facebook登录sdk 4的电子邮件

Android保存共享首选项并获取用户facebook登录sdk 4的电子邮件,android,facebook,android-studio,facebook-sdk-4.0,Android,Facebook,Android Studio,Facebook Sdk 4.0,我正在构建一个应用程序,用户首先通过facebook登录,然后进入另一个地图活动。每当我重新启动应用程序时,它会显示“注销”按钮“不登录”,或者只是进入另一个活动,另外我还想保存我客户的电子邮件。这是我的密码- public class MainActivity extends AppCompatActivity { private TextView info; private LoginButton loginButton; private CallbackManager callb

我正在构建一个应用程序,用户首先通过facebook登录,然后进入另一个地图活动。每当我重新启动应用程序时,它会显示“注销”按钮“不登录”,或者只是进入另一个活动,另外我还想保存我客户的电子邮件。这是我的密码-

public class MainActivity extends AppCompatActivity {





private TextView info;
private LoginButton loginButton;
private CallbackManager callbackManager;
SharedPreferences sp;



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    FacebookSdk.sdkInitialize(getApplicationContext());
    callbackManager = CallbackManager.Factory.create();

    setContentView(R.layout.activity_main);
    sp = getPreferences(MODE_PRIVATE);
    String access_token = sp.getString("access_token",null);
    long expires = sp.getLong("access_expires",0);
    if (access_token != null){

    }




    info = (TextView) findViewById(R.id.info);
    loginButton = (LoginButton) findViewById(R.id.login_button);

    List<String> permissionNeeds = Arrays.asList("email", "user_birthday", "public_profile");
    loginButton.setReadPermissions(permissionNeeds);

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

        @Override
        public void onSuccess(LoginResult loginResult) {
            String token = loginResult.getAccessToken().getToken();
            Log.d("LOGIN_SUCCESS", "Success");
            loginButton.setVisibility(View.INVISIBLE); //<- IMPORTANT
            Intent intent = new Intent(MainActivity.this,MapsActivity.class);
            startActivity(intent);
            finish();//<- IMPORTANT

        }


        @Override
        public void onCancel() {
            info.setText("Login attempt Canceled");


        }

        @Override
        public void onError(FacebookException error) {
            info.setText("Login attempt failed");

        }
    });
    AccessTokenTracker accessTokenTracker = new AccessTokenTracker() {
        @Override
        protected void onCurrentAccessTokenChanged(
                AccessToken oldAccessToken,
                AccessToken currentAccessToken) {
            // Set the access token using   `q
            // currentAccessToken when it's loaded or set.
        }
    };

}


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




}




public void imageView (View v) {

    ImageView img = (ImageView) findViewById(R.id.loofreLogo);
    if (img != null) {
        img.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.setAction(Intent.ACTION_VIEW);
                intent.addCategory(Intent.CATEGORY_BROWSABLE);
                intent.setData(Uri.parse("http://www.loofre.com"));
                startActivity(intent);
            }
        });
    }
}
public void InsOnclick(View args0) {
    if (args0.getId()==R.id.Bins){
        Intent intent = new Intent(this,instructionSlide.class);
        this.startActivity(intent);
    }
}
public void AboutUs (View args1){
    if (args1.getId()==R.id.Babout){
        Intent intent = new Intent(this,AboutUs.class);
        this.startActivity(intent);
    }

}
public类MainActivity扩展了AppCompatActivity{
私有文本视图信息;
私人登录按钮登录按钮;
私人CallbackManager CallbackManager;
共享参考sp;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
sdkinInitialize(getApplicationContext());
callbackManager=callbackManager.Factory.create();
setContentView(R.layout.activity_main);
sp=getPreferences(模式\私有);
String access\u token=sp.getString(“access\u token”,null);
long expires=sp.getLong(“访问到期”,0);
if(访问令牌!=null){
}
info=(TextView)findViewById(R.id.info);
loginButton=(loginButton)findviewbyd(R.id.login_按钮);
List permissionNeeds=Arrays.asList(“电子邮件”、“用户生日”、“公共档案”);
setReadPermissions(permissionNeeds);
registerCallback(callbackManager,newfacebookcallback()){
@凌驾
成功时公共无效(LoginResult LoginResult){
字符串标记=loginResult.getAccessToken().getToken();
Log.d(“登录成功”、“成功”);

loginButton.setVisibility(View.INVISIBLE);//要在共享首选项中保存数据,请执行以下操作:

SharedPreferences preferencesPut = getSharedPreferences("KEY", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = preferences.edit();
        editor.putString("nameKEY", "name");
        editor.putString("emailKEY", "email");
        editor.putBoolean("done", true);
        editor.commit();
这将保存您的姓名和电子邮件。字符串“KEY”是一个特定的键,用于指定您想要知道的共享首选项值。然后,要从共享首选项中提取数据,请执行以下操作:

SharedPreferences preferencesGet = getSharedPreferences("KEY", Context.MODE_PRIVATE);
String name = preferencesGet.getString("nameKEY", "default");
String email = preferencesGet.getString("emailKEY", "default");

您将获得字符串“name”和“email”中的名称和电子邮件。您将获得值“default”如果您无法在共享首选项中保存数据或无法获取数据。

您是否尝试使用共享首选项保存数据?@BhaveshMisri先生,我不知道如何做…尝试了youtube和stackoverflow的一些教程,但无法理解…因此我需要创建另一个活动?对于登录,我仅此活动无法执行在“我的项目帮助”中输入此选项,是否可以获取姓名和电子邮件?如果是,请将其放在代码的第一部分,而不是“姓名”和“电子邮件”输入您的姓名和电子邮件。@Bhaesh Misri按照这个答案回答-这会成功吗?@KuldeepRaj所以您无法从facebook获取用户数据?如果您想获取数据,那么该链接将对您有效。获取数据后,使用共享首选项保存数据。