0

您好,我需要从 facebook 个人资料中检索用户名和通知,这是我的 facebook 连接器代码:

import com.FeedPass.SessionEvents.AuthListener;
import com.FeedPass.SessionEvents.LogoutListener;

public class FacebookConnector {
private Facebook facebook = null;
private Context context;
private String[] permissions;
private Handler mHandler;
private Activity activity;
private SessionListener mSessionListener = new SessionListener();
private String _accessToken;

public FacebookConnector(String appId,Activity activity,Context context,String[] permissions){
    this.facebook = new Facebook(appId);

    SessionStore.restore(facebook, context);

    SessionEvents.addAuthListener(mSessionListener);
    SessionEvents.addLogoutListener(mSessionListener);
    this.context=context;
    this.permissions=permissions;
    this.mHandler = new Handler();
    this.activity=activity;
}

public void login() {
    if (!facebook.isSessionValid()) {
        facebook.authorize(this.activity, this.permissions,new LoginDialogListener());
    }
}

public void logout() {
    SessionEvents.onLogoutBegin();
    AsyncFacebookRunner asyncRunner = new AsyncFacebookRunner(this.facebook);
    asyncRunner.logout(this.context, new LogoutRequestListener());
}

public void postMessageOnWall(String msg) {
    if (facebook.isSessionValid()) {
        Bundle parameters = new Bundle();
        parameters.putString("message", msg);
        try {
            String response = facebook.request("me/feed", parameters,"POST");
            System.out.println(response);
        } catch (IOException e) {
            e.printStackTrace();
        }
    } else {
        login();
    }
}   

public String getNotifications(){
    String result = null;
    if(facebook.isSessionValid()){
        Bundle bundle = new Bundle();
        bundle.putString(Facebook.TOKEN, _accessToken);
        try{
            result = facebook.request("me/notifications", bundle, "GET");
        }
        catch(IOException e){
            e.printStackTrace();
        }
    }
    else{
        login();
    }
    return result;
}

private final class LoginDialogListener implements DialogListener {
    public void onComplete(Bundle values) {
        SessionEvents.onLoginSuccess();
    }

    public void onFacebookError(FacebookError error) {
        SessionEvents.onLoginError(error.getMessage());
    }

    public void onError(DialogError error) {
        SessionEvents.onLoginError(error.getMessage());
    }

    public void onCancel() {
        SessionEvents.onLoginError("Action Canceled");
    }
}

public class LogoutRequestListener extends BaseRequestListener {
    public void onComplete(String response, final Object state) {
        // callback should be run in the original thread, 
        // not the background thread
        mHandler.post(new Runnable() {
            public void run() {
                SessionEvents.onLogoutFinish();
            }
        });
    }
}

private class SessionListener implements AuthListener, LogoutListener {

    public void onAuthSucceed() {
        SessionStore.save(facebook, context);
    }

    public void onAuthFail(String error) {
    }

    public void onLogoutBegin() {           
    }

    public void onLogoutFinish() {
        SessionStore.clear(context);
    }
}

public Facebook getFacebook() {
    return this.facebook;
}
}

如您所见,我有一种检索用户通知的方法,但我不确定它是否有效,有人知道如何以简单的方式执行此操作吗?

4

3 回答 3

1

您可以从中获取 facebook 用户名

String User_name = null; 
try {
    User_name = new JSONObject(facebook.request("username"));

} catch (MalformedURLException e) {
    e.printStackTrace();
} catch (JSONException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}
于 2012-07-28T12:28:51.557 回答
1

您可以使用以下代码检索 facebook 用户的名称:

public static String getName() {
        String response;
        String name = "";
        try {
            response = ParseFacebookUtils.getFacebook().request("me");
            JSONObject json = Util.parseJson(response);
            name = json.getString("first_name");
        } 
        catch (MalformedURLException e) {
            e.printStackTrace();
        } 
        catch (IOException e) {
            e.printStackTrace();
        } 
        catch (FacebookError e) {
            e.printStackTrace();
        } 
        catch (JSONException e) {
            e.printStackTrace();
        }

        return name;
    }
于 2012-07-28T12:27:17.530 回答
0

这就是您检索通知的方式。即使这是一个老问题。我会发布它以防有人发现它有帮助

private void onSessionStateChange(Session session, SessionState state, Exception exception) {
if (state.isOpened()) {
    InboxMessage.setVisibility(View.VISIBLE);

    new Request(session,"/me/notifications", null,HttpMethod.GET,new Request.Callback() {

                public void onCompleted(Response response) {
                    GraphObject object = response.getGraphObject();
                        if (object != null) {
                            InboxMessage.setText(object.getProperty("data").toString());
                        } else {
                            InboxMessage.setText("Notifications returns null");
                        }
                }
            }
        ).executeAsync();
} else {
    InboxMessage.setVisibility(View.INVISIBLE);
    Log.i(TAG, "Logged out...");
}
}
于 2014-07-23T21:31:00.307 回答