Android 如何通过SharedReferences获取Facebook用户档案(id、姓名、电子邮件和图片)并在其他活动中使用

Android 如何通过SharedReferences获取Facebook用户档案(id、姓名、电子邮件和图片)并在其他活动中使用,android,sharedpreferences,facebook-login,Android,Sharedpreferences,Facebook Login,我有一个应用程序,使用Facebook登录,然后转到另一个活动 首先,我检查了正确的登录,工作正常 然后,我将个人资料的日期保存在一个字符串数组列表中,然后保存在SharedReferences上 这是我的第一个活动(登录活动)的代码 导入android.content.DialogInterface; 导入android.content.Intent; 导入android.content.pm.PackageInfo; 导入android.content.pm.PackageManager;

我有一个应用程序,使用Facebook登录,然后转到另一个活动

首先,我检查了正确的登录,工作正常

然后,我将个人资料的日期保存在一个字符串数组列表中,然后保存在SharedReferences上

这是我的第一个活动(登录活动)的代码

导入android.content.DialogInterface;
导入android.content.Intent;
导入android.content.pm.PackageInfo;
导入android.content.pm.PackageManager;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.util.Base64;
导入android.util.Log;
导入android.widget.ImageView;
导入android.widget.TextView;
导入android.widget.Toast;
导入com.bumptech.glide.glide;
导入com.facebook.CallbackManager;
导入com.facebook.facebook回调;
导入com.facebook.facebook异常;
导入com.facebook.FacebookSdk;
导入com.facebook.GraphRequest;
导入com.facebook.GraphResponse;
导入com.facebook.appevents.AppEventsLogger;
导入com.facebook.login.LoginResult;
导入com.facebook.login.widget.LoginButton;
导入org.json.JSONException;
导入org.json.JSONObject;
导入java.net.MalformedURLException;
导入java.net.URL;
导入java.security.MessageDigest;
导入java.security.NoSuchAlgorithmException;
导入java.security.Signature;
导入java.util.array;
公共类MainActivity扩展了AppCompatActivity{
登录按钮登录按钮FB;
CallbackManager CallbackManager;
列表配置文件=新的ArrayList();;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sdkinInitialize(getApplicationContext());
AppEventsLogger.activateApp(此);
LoginManager.getInstance().logOut();
loginButtonfb=(LoginButton)findviewbyd(R.id.login_按钮);
//启动callbackmanager
callbackManager=callbackManager.Factory.create();
//获得获取公共配置文件、电子邮件、id和好友的权限
loginButtonfb.setReadPermissions(Arrays.asList(“public_profile”、“user_friends”、“email”);
//按钮的寄存器响应
registerCallback(callbackManager,newfacebookcallback()){
@凌驾
成功时公共无效(LoginResult LoginResult){
GraphRequest request=GraphRequest.NewMereRequest(loginResult.getAccessToken(),new GraphRequest.GraphJSONObjectCallback()){
@凌驾
未完成公共无效(JSONObject对象,GraphResponse响应){
Log.d(“res”,object.toString());
Log.d(“res_obj”,response.toString());
试一试{
stringid=object.getString(“id”);
试一试{
URL配置文件\u pic=新URL(“https://graph.facebook.com/“+id+”/picture?type=large”);
Log.i(“profile_pic”,profile_pic+”);
String f_name=object.getString(“first_name”);
String l_name=object.getString(“last_name”);
字符串名称=f_名称+“”+l_名称;
String email=object.getString(“email”);
字符串image=profile_pic.toString();
Log.d(“数据”,电子邮件+姓名+图像+id);
String type=“facebook”;
//将数据保存到arraylist中
添加(id);
添加(姓名);
添加(电子邮件);
添加(图像);
//保存到SharedReferences中
StringBuilder StringBuilder=新的StringBuilder();
用于(字符串s:profile){
stringBuilder.append;
stringBuilder.append(“,”);
}
SharedReferences sharpref=getSharedReferences(“ProfileList”,0);
SharedReferences.Editor=sharpref.edit();
putString(“ProfileList”,stringBuilder.toString());
commit();
如果(电子邮件==null){
}
}捕获(格式错误){
e、 printStackTrace();
}
}捕获(JSONException e){
e、 printStackTrace();
}
}
});
Bundle参数=新Bundle();
parameters.putString(“字段”、“id、名字、姓氏、电子邮件、性别”);
请求。设置参数(参数);
request.executeAsync();
goIndexScreen();
}
@凌驾
公开作废{
Toast.makeText(getApplicationContext(),“Has cancelado el-inicio de sesión”,Toast.LENGTH_LONG.show();
}
@凌驾
public void onError(facebook异常错误){
Toast.makeText(getApplicationContext(),“Error al conectar con Facebook”,Toast.LENGTH_LONG.show();
}
});
}
//更正回调所需的方法
@凌驾
受保护的void onActivityResult(int请求代码、int结果代码、意图数据){
callbackManager.onActivityResult(请求代码、结果代码、数据);
}
//方法转到下一个活动
私有void goIndexScreen(){
意向意向=新意向(此,Index.class);
intent.addFlags(intent.FLAG_活动_清除_顶部| intent.FLAG_活动_清除_任务| intent.FLAG_活动_新任务);
星触觉(意向);
}
}

这是下一个活动的代码。这是一个导航抽屉活动。 首先,我创建一个视图并指定一个headerview。然后,加载
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Base64;
import android.util.Log;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.bumptech.glide.Glide;
import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.FacebookSdk;
import com.facebook.GraphRequest;
import com.facebook.GraphResponse;
import com.facebook.appevents.AppEventsLogger;
import com.facebook.login.LoginResult;
import com.facebook.login.widget.LoginButton;

import org.json.JSONException;
import org.json.JSONObject;

import java.net.MalformedURLException;
import java.net.URL;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.Signature;
import java.util.Arrays;



  public class MainActivity extends AppCompatActivity {

  LoginButton loginButtonfb;
  CallbackManager callbackManager;
  List<String> profile=new ArrayList<>();;

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

    setContentView(R.layout.activity_main);

    FacebookSdk.sdkInitialize(getApplicationContext());
    AppEventsLogger.activateApp(this);

    LoginManager.getInstance().logOut();
    loginButtonfb=(LoginButton)findViewById(R.id.login_button);

    // initiate callbackmanager
    callbackManager = CallbackManager.Factory.create();

    //get permision to get public profile,email,id,and friends
    loginButtonfb.setReadPermissions(Arrays.asList("public_profile","user_friends","email"));

    //register response of button
    loginButtonfb.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.d("res", object.toString());
                    Log.d("res_obj", response.toString());
                    try {

                        String id = object.getString("id");
                        try {
                            URL profile_pic = new URL("https://graph.facebook.com/" + id + "/picture?type=large");
                            Log.i("profile_pic", profile_pic + "");

                            String f_name = object.getString("first_name");
                            String l_name = object.getString("last_name");
                            String name = f_name + " " + l_name;

                            String email = object.getString("email");
                            String image = profile_pic.toString();


                            Log.d("data", email + name + image+id);
                            String type = "facebook";

                            //Save the data into the arraylist
                            profile.add(id);
                            profile.add(name);
                            profile.add(email);
                            profile.add(image);

                            //save into sharedpreferences
                            StringBuilder stringBuilder = new StringBuilder();

                            for (String s:profile){
                                stringBuilder.append(s);
                                stringBuilder.append(",");
                            }

                            SharedPreferences sharpref = getSharedPreferences("ProfileList",0);
                            SharedPreferences.Editor editor = sharpref.edit();
                            editor.putString("ProfileList", stringBuilder.toString());
                            editor.commit();


                            if (email == null) {

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


                    } catch (JSONException e) {

                        e.printStackTrace();

                    }

                }
            });
            Bundle parameters = new Bundle();
            parameters.putString("fields", "id, first_name, last_name, email,gender");
            request.setParameters(parameters);
            request.executeAsync();
        goIndexScreen();
        }

        @Override
        public void onCancel() {
            Toast.makeText(getApplicationContext(),"Has cancelado el inicio de sesión",Toast.LENGTH_LONG).show();
        }

        @Override
        public void onError(FacebookException error) {
            Toast.makeText(getApplicationContext(),"Error al conectar con Facebook",Toast.LENGTH_LONG).show();
        }
    });
}


//method necesary to correct callback
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
callbackManager.onActivityResult(requestCode,resultCode,data);
}

//method to go to next activity
private void goIndexScreen() {
    Intent intent=new Intent(this,Index.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);
}
public class Index extends AppCompatActivity
    implements NavigationView.OnNavigationItemSelectedListener {

   private ImageView ivprofile;
   private TextView tvname;
   private TextView tvemail;
   private TextView tvidnumber;
   private String picprofile;
   private String name;
   private String idnumber;
   private String email;
   final List<String> profile = new ArrayList<String>();
   private View headerview;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_index);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }
    });

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
            this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.addDrawerListener(toggle);
    toggle.syncState();

    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);

   //create a headerview to conect to header of left menu
    headerview=navigationView.getHeaderView(0);

    ivprofile=(ImageView)headerview.findViewById(R.id.imageProfile);
    tvname=(TextView)headerview.findViewById(R.id.fullName);
    tvemail=(TextView)headerview.findViewById(R.id.email);
    tvidnumber=(TextView) headerview.findViewById(R.id.idNumber);


    //check if session is already connected
    if(AccessToken.getCurrentAccessToken()==null){
        goLoginScreen();
    }

    //Load file saved by sharedpreferences into a new arraylist
    final SharedPreferences sharpref = getSharedPreferences("ProfileList",0);
    String Items = sharpref.getString("ProfileList","");
    String [] listItems = Items.split(",");
    for (int i=0;i<listItems.length;i++){
        profile.add(listItems[i]);
    }

    //get the profile

    idnumber=profile.get(0);
    name=profile.get(1);
    email=profile.get(2);
    picprofile=profile.get(3);

   tvname.setText(name);
   tvidnumber.setText(idnumber);
   tvemail.setText(email);
   Glide.with(this).load(picprofile).into(ivprofile);


Log.d("ArrayPerfil", name+email+idnumber+picprofile);


}

@Override
public void onBackPressed() {
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    if (drawer.isDrawerOpen(GravityCompat.START)) {
        drawer.closeDrawer(GravityCompat.START);
    } else {
        super.onBackPressed();
    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.index, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}

@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
    // Handle navigation view item clicks here.
    int id = item.getItemId();

    if (id == R.id.nav_camera) {
        // Handle the camera action
    } else if (id == R.id.nav_gallery) {

    } else if (id == R.id.nav_slideshow) {

    } else if (id == R.id.nav_manage) {

    } else if (id == R.id.nav_share) {

    } else if (id == R.id.nav_send) {

    }else if (id == R.id.nav_logout) {
        LoginManager.getInstance().logOut();
        goLoginScreen();
    }

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawer.closeDrawer(GravityCompat.START);
    return true;
}

private void goLoginScreen() {
    Intent intent=new Intent(this,MainActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);
}
 public void setFacebookConnection() {

        LoginManager.getInstance().logOut();


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

        LoginManager.getInstance().logInWithReadPermissions(mActivity, permissionNeeds);

        FacebookSdk.sdkInitialize(mActivity);

        callbackManager = CallbackManager.Factory.create();

        LoginManager.getInstance().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.d("res", object.toString());
                        Log.d("res_obj", response.toString());
                        try {

                            String id = object.getString("id");
                            try {
                                URL profile_pic = new URL("https://graph.facebook.com/" + id + "/picture?width=200&height=150");
                                Log.i("profile_pic", profile_pic + "");

                                String f_name = object.getString("first_name");
                                String l_name = object.getString("last_name");
                                String name = f_name + " " + l_name;
                                String email = object.getString("email");
                                String image = profile_pic.toString();


                                Log.d("data", email + name + image);
                                String type = "facebook";

                                if (email == null) {

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


                        } catch (JSONException e) {

                            e.printStackTrace();

                        }

                    }
                });
                Bundle parameters = new Bundle();
                parameters.putString("fields", "id, first_name, last_name, email,gender");
                request.setParameters(parameters);
                request.executeAsync();
            }

            @Override
            public void onCancel() {

                Log.d("fb_exception", "cancel by user");
            }

            @Override
            public void onError(FacebookException exception) {

                Log.d("fb_exception", exception.toString());

            }
        });

    }
 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        callbackManager.onActivityResult(requestCode, resultCode, data);

        super.onActivityResult(requestCode, resultCode, data);
    }
  NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);

     headerView = navigationView.getHeaderView(0);

     tvUsername = (Textview) headerView.findViewById(R.id.username_textview_id);

     profile_image = (Textview) headerView.findViewById(R.id.profile_image);
   /**
 * this method used to user login with facebook.
 */
private void loginWithFacebook() {

    mLoginFbButton.setReadPermissions("public_profile", "email");
    mLoginFbButton.setFragment(this);
    mLoginFbButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            // App code
            if (Profile.getCurrentProfile() == null) {
                mProfileTracker = new ProfileTracker() {
                    @Override
                    protected void onCurrentProfileChanged(Profile profile, Profile profile2) {
                 // here getting fb user profile object.       
                }
                };
            } else {
                registerUsingFaceBook(Profile.getCurrentProfile());
            }

        }

        @Override
        public void onCancel() {

         }

        @Override
        public void onError(FacebookException exception) {
        }
    });
}