如何在此代码中存储用户数据(共享首选项)?

时间:2016-04-20 05:52:57

标签: java android facebook

我的主页是facebook登录活动,将进入导航抽屉。一切正常但我每次打开应用程序时都需要登录。我试过做共享偏好和accessstoken。我不知道如何使用此代码。请告诉我。

这是我的Main.java

public class Main extends AppCompatActivity {
CallbackManager callbackManager;
LoginButton loginButton; //facebookLoginButton


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

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

    setContentView(R.layout.activity_main);

    loginButton = (LoginButton) findViewById(R.id.login_button);
    assert loginButton != null;
    loginButton.setReadPermissions("email");

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

            getUserInfo(login_result);
        }

        @Override
        public void onCancel() {

        }

        @Override
        public void onError(FacebookException exception) {

        }
    });
}

protected void getUserInfo(LoginResult login_result){

    GraphRequest data_request = GraphRequest.newMeRequest(
            login_result.getAccessToken(),
            new GraphRequest.GraphJSONObjectCallback() {
                @Override
                public void onCompleted(
                        JSONObject json_object,
                        GraphResponse response) {

                    Intent intent = new Intent(Main.this,HomeActivity.class);
                    intent.putExtra("jsondata",json_object.toString());
                    startActivity(intent);
                }
            });
    Bundle parameter = new Bundle();
    parameter.putString("fields", "id,name,email,picture.width(150).height(150)");
    data_request.setParameters(parameter);
    data_request.executeAsync();

}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    callbackManager.onActivityResult(requestCode, resultCode, data);
    Log.e("data", data.toString());
}

 @Override
protected void onResume() {
    super.onResume();

}

@Override
protected void onPause() {
    super.onPause();

}
}

帮助。

3 个答案:

答案 0 :(得分:4)

初始化变量

SharedPreferences sharedpreferences;
你的OnCreate()

上的

sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);

保存您的数据

SharedPreferences.Editor editor = sharedpreferences.edit();
        editor.putString("name", name);
        editor.putString("phone", phone);
        editor.commit();

获取共享首选项保存的数据

SharedPreferences settins = PreferenceManager
        .getDefaultSharedPreferences(Youractivity.this);
     String pref1=settings.getString("name", "anon");
     String pref2=settings.getString("Phone", "anon");

答案 1 :(得分:0)

实际上,Facebook SDK存储了您需要的一切。例如,您可以通过检查null的访问令牌来检查用户是否已登录。如果用户未登录,则AccessToken.getCurrentAccessToken()会返回null。而且您不需要存储个人资料信息,SDK已经执行此操作,例如通过调用Profile.getCurrentProfile()您检索一些基本信息有关当前登录用户的信息。

答案 2 :(得分:0)

最好在保存和访问时命名共享首选项。这在多个共享首选项的情况下很有用。

在您要保存的活动上,键入:

SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref1", MODE_PRIVATE);
editor = pref.edit(); 
editor.putString("firstName",firstName);
editor.commit();

在您要访问的活动上,键入:

 SharedPreferences prefs = getApplicationContext().getSharedPreferences("MyPref1", Context.MODE_PRIVATE);
 String firstName = prefs.getString("firstName", "null");