如何使用 Facebook sdk 将 Facebook 用户个人资料信息存储在数据库中?

Posted

技术标签:

【中文标题】如何使用 Facebook sdk 将 Facebook 用户个人资料信息存储在数据库中?【英文标题】:How do i store Facebook user profile information on a database using the Facebook sdk? 【发布时间】:2017-07-10 05:22:35 【问题描述】:

我能够为我正在为 android 开发的社交网络应用程序实现 Facebook 登录。我使用 Facebook 的 android sdk 来完成此操作,并获取名字/姓氏、性别和年龄并将其显示在个人资料页面上。现在我想知道如何将这些信息存储在数据库中,以便将其显示给访问配置文件的其他用户。提前致谢!这是我用于个人资料页面的代码。

import android.content.Intent;
import android.graphics.Typeface;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.util.TypedValue;
import android.widget.ImageView;
import android.widget.TextView;
import com.facebook.AccessToken;
import com.facebook.GraphRequest;
import com.facebook.GraphResponse;
import com.facebook.Profile;
import com.squareup.picasso.Picasso;
import org.json.JSONObject;


public class ProfileActivity extends AppCompatActivity 

    private Profile profile = Profile.getCurrentProfile();
    public ImageView profileActivityPicture;
    public TextView nameFirst, nameLast, age, gend, user_location;
    private String userID, email, gender, picture, birthday, name, city;
    private String profilePicUrl;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_profile);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar2);
        setSupportActionBar(toolbar);
        if (getSupportActionBar() != null)
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            getSupportActionBar().setDisplayShowHomeEnabled(true);
            getSupportActionBar().setTitle("My Profile");
        
        nameFirst = (TextView) findViewById(R.id.profileActivityFirstName);
        nameLast = (TextView) findViewById(R.id.profileActivityLastName);
        age = (TextView) findViewById(R.id.profileActivityAge);
        gend = (TextView) findViewById(R.id.profileActivityGender);
        profileActivityPicture = (ImageView) findViewById(R.id.profileActivityPic);
        user_location = (TextView) findViewById(R.id.profileActivityCity);
        if(profile != null) 
            nameFirst.setText(getString(R.string.hello_user, profile.getFirstName()));
            nameLast.setText(getString(R.string.hello_user, profile.getLastName()));
        

        nameFirst.setTextSize(TypedValue.COMPLEX_UNIT_SP,20);
        nameFirst.setTypeface(null, Typeface.BOLD);
        nameLast.setTextSize(TypedValue.COMPLEX_UNIT_SP,20);
        nameLast.setTypeface(null, Typeface.BOLD);

        GraphRequest request = GraphRequest.newMeRequest(AccessToken.getCurrentAccessToken(),
                new GraphRequest.GraphJSONObjectCallback() 
                    @Override
                    public void onCompleted(
                            JSONObject data,
                            GraphResponse response) 
                        try 
                            data = response.getJSONObject();
                            if (data.has("id"))
                                userID = data.getString("id");
                            if (data.has("name"))
                                name = data.getString("name");
                            if (data.has("location"))
                                city = data.getJSONObject("location").getString("name");
                                user_location.setText(city);
                                user_location.setTextSize(TypedValue.COMPLEX_UNIT_SP,14);
                            if (data.has("picture"))
                                Picasso.with(ProfileActivity.this).load("https://graph.facebook.com/" + userID+ "/picture?width=3000&height=4000").into(profileActivityPicture);
                            if (data.has("birthday"))
                                birthday = data.getString("birthday");
                                age.setText(birthday);
                                age.setTextSize(TypedValue.COMPLEX_UNIT_SP,20);
                                age.setTypeface(null, Typeface.BOLD);
                            if (data.has("gender"))
                                gender = data.getString("gender");
                                gend.setText(gender);
                                gend.setTextSize(TypedValue.COMPLEX_UNIT_SP,18);
                         catch(Exception e) 
                            e.printStackTrace();
                        
                    
                );
        Bundle parameters = new Bundle();
        parameters.putString("fields",  "id,name,email,gender,cover,picture.type(large),location");
        request.setParameters(parameters);
        request.executeAsync();
    



    @Override
    public boolean onSupportNavigateUp() 
        onBackPressed();
        return true;
    

    @Override
    public void onBackPressed() 
        Intent intent = new Intent(getApplicationContext(), MainActivity.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        startActivity(intent);
        finish();
    

    @Override
    public void onDestroy()
        super.onDestroy();
    

【问题讨论】:

当您从 Facebook SDK 获取用户数据并解析该 json 对象并保存您想要的内容(如果它是本地数据库或 Web 上的内容)时。您面临什么问题? 您可以简单地解析json并存储在您想要的任何地方.. 我现在想将它保存到本地数据库中,因为我正在使用该应用程序。我在考虑 mysql 本地数据库。 【参考方案1】:

当您在完成的回调中得到响应时,只需像这样解析

JSONObject jobj = response.getJSONObject();

                        if (jobj != null) 
                            try 
                                ProfileBean profileBean = new ProfileBean();
                                profileBean.id = jobj.getString("id");
                                profileBean.name = jobj.getString("name");
                                profileBean.email = jobj.getString("email");
                                profileBean.link = jobj.getString("link");
                                profileBean.last_name = jobj.getString("last_name");
                                profileBean.first_name = jobj.getString("first_name");
                                profileBean.gender = jobj.getString("gender");

                                JSONObject pic = jobj.getJSONObject("picture");
                                JSONObject data = pic.getJSONObject("data");
                                profileBean.profile_pic = data.getString("url");


                             catch (Exception e) 
                                // print exception
                            
                        

在这里,您的 FB 数据存储在 profileBean 中,因此您可以像这样获取您的数据..

【讨论】:

是的,我这样做是为了保存用户数据并将其显示在个人资料页面上,但如果我希望其他用户也查看该个人资料信息怎么办。 为此,您必须将此数据存储到本地存储中。为此,您可以使用任何人的共享首选项或本地数据库.. 但我更喜欢将数据存储在本地数据库中.. 我应该使用什么样的本地数据库? MySQL? SQLite? 如果你想将数据存储在设备中而不是使用 SQLite,如果你想存储在服务器上而不是你必须做更多的事情并使用 MYSQL..

以上是关于如何使用 Facebook sdk 将 Facebook 用户个人资料信息存储在数据库中?的主要内容,如果未能解决你的问题,请参考以下文章

如果目标 iPhone 应用在 App Store 上不可用,如何测试 Facebook SDK 的 apprequest?

在 iOS 中抑制 Facebook SDK UIAlertView

无法在 Xcode Swift Facebook 登录 SDK 中获取访问令牌

Facebook Android SDK 4.0:newGraphPathRequest 返回“必须使用活动访问令牌来查询有关当前用户的信息。”

从 facebook API 保存用户的个人资料图片 - PHP SDK V.5

在 iPhone 应用程序中,如何将照片发布到 Facebook 粉丝页面。在它之前如何喜欢它?使用 facebook-ios-sdk