如何使用 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