Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在android中检索facebook用户名和通知?_Java_Android_Facebook - Fatal编程技术网

Java 如何在android中检索facebook用户名和通知?

Java 如何在android中检索facebook用户名和通知?,java,android,facebook,Java,Android,Facebook,你好,我需要从facebook个人资料中检索用户名和通知,这是我的facebook联系人代码: import com.FeedPass.SessionEvents.AuthListener; import com.FeedPass.SessionEvents.LogoutListener; public class FacebookConnector { private Facebook facebook = null; private Context context; private Str

你好,我需要从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;
}
}

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

以下代码可用于检索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;
    }

你可以从这里获得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();
}

这就是您检索通知的方式。即使这是一个老问题。我会把它贴出来,以防有人觉得有用

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...");
}
}

您只能在用户登录后调用此方法。这是我在logcat上看到的错误,仍然不走运<代码>07-31 13:08:24.578:E/AndroidRuntime(4048):在com.facebook.android.Util.openUrl(Util.java:215)07-31 13:08:24.578:E/AndroidRuntime(4048):在com.facebook.android.facebook.request(facebook.java:751)07-31 13:08:24.578:E/AndroidRuntime(4048):在com.facebook.android.facebook.request(facebook.java:688)07-31 13:08:24.578:E/idruntime(4048):在com.FeedPass.FacebookConnector.getName(FacebookConnector.java:77)07-31 13:08:24.578:E/AndroidRuntime(4048):在response=ParseFacebookUtils.getFacebook().request(“我”);我不确定问题是什么,但我猜这与用户登录有关。你能从登录的用户那里读取其他数据吗?