Android从Facebook个人资料中获取生日日期

时间:2012-09-03 16:55:06

标签: java android facebook facebook-graph-api

我想得到我朋友列表中的所有生日日期。我已经试了好几天了。我的代码如下。

Facebook facebook = new Facebook(<MY_FACEBOOK_ID>);

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

    mContext = this;
    setContentView(R.layout.main);

    showNotification();

  final String[] PERMISSIONS = new String[] {"user_location", "user_birthday"};        


    facebook.authorize(this, PERMISSIONS, new DialogListener() {
        @Override
        public void onComplete(Bundle values) {}


        @Override
        public void onCancel() {}

        @Override
        public void onFacebookError(FacebookError e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onError(DialogError e) {
            // TODO Auto-generated method stub

        }
    });

    try {

          String token = facebook.getAccessToken();

          Bundle bundle = new Bundle();
          bundle.putString("fields", "id,name");
          bundle.putString("access_token", token);

              String response = facebook.request( "me/friends", bundle ); 

              facebook.setAccessToken(facebook.getAccessToken());

              Toast.makeText(mContext, token , Toast.LENGTH_LONG).show();
              Toast.makeText(mContext, response, Toast.LENGTH_LONG).show();

              JSONObject json = Util.parseJson( response );

              JSONArray data = json.getJSONArray( "data" );

              for ( int i = 0; i < data.length(); i++ )
              {
                  JSONObject friend = data.getJSONObject( i );

                  String id = friend.getString( "id" );
                  String name = friend.getString( "name" );
                  Toast.makeText(mContext, "ID: "+ id , Toast.LENGTH_LONG).show();
                  Toast.makeText(mContext, "NAME: "+ name , Toast.LENGTH_LONG).show();
              }

每次我使用此代码都会出错。并且令牌都显示为空,响应显示问题 “必须使用活动访问令牌来查询有关当前用户的信息”

1 个答案:

答案 0 :(得分:5)

创建方法:

getProfileInformation()

在方法体中你必须写:

public void getProfileInformation() {
mAsyncRunner.request("me", new RequestListener() {
    @Override
    public void onComplete(String response, Object state) {
        Log.d("Profile", response);
        String json = response;
        try {
            JSONObject profile = new JSONObject(json);
            // getting name of the user
            String name = profile.getString("name");
            // getting email of the user
            String email = profile.getString("email");
            //getting user birthday
            String birth_day=profile.getString("birthday");

            runOnUiThread(new Runnable() {

                @Override
                public void run() {
                    Toast.makeText(getApplicationContext(), "Name: " + name + "\nEmail: " + email, Toast.LENGTH_LONG).show();
                }

            });

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

    @Override
    public void onIOException(IOException e, Object state) {
    }

    @Override
    public void onFileNotFoundException(FileNotFoundException e,
            Object state) {
    }

    @Override
    public void onMalformedURLException(MalformedURLException e,
            Object state) {
    }

    @Override
    public void onFacebookError(FacebookError e, Object state) {
    }
});

}

以上功能将从facebook获取json数据。您需要解析json以获取单个配置文件数据。

来自facebook的样本简介json将是这样的:

     {
   "id": "1464730016",
   "name": "XYZ",
   "first_name": "XYZ",
   "last_name": "ABC",
   "link": "https://....",
   "username": "XYZ",
   "birthday": "22/10/89",
   "hometown": 
}

有关详细信息,请参阅:

http://www.androidhive.info/2012/03/android-facebook-connect-tutorial/