Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.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
FB Android SDK:如何等待请求回调完成_Android_Facebook Graph Api_Request_Facebook Sdk 3.14.x - Fatal编程技术网

FB Android SDK:如何等待请求回调完成

FB Android SDK:如何等待请求回调完成,android,facebook-graph-api,request,facebook-sdk-3.14.x,Android,Facebook Graph Api,Request,Facebook Sdk 3.14.x,我正在尝试等待,请求的回调函数的onCompleted()完成。但是,RequestAsyncTask的方法get()总是在这种情况发生之前返回。因此,在我的程序的进一步陈述中出现了问题。println输出总是在数据库查询之后显示,并且不等于null。 这是我的密码: private void onSessionStateChange(Session session, SessionState state, Exception exception) { if (state.isO

我正在尝试等待,
请求的回调函数的
onCompleted()
完成。但是,
RequestAsyncTask
的方法
get()
总是在这种情况发生之前返回。因此,在我的程序的进一步陈述中出现了问题。
println
输出总是在数据库查询之后显示,并且不等于
null
。 这是我的密码:

private void onSessionStateChange(Session session, SessionState state, Exception exception) {
        if (state.isOpened()) {
            // show authendicated ui
            Log.i(TAG, "Logged in...");
            try {
                Request.newMeRequest(session, new Request.GraphUserCallback() {

                    // callback after Graph API response with user object
                    @Override
                    public void onCompleted(GraphUser user, Response response) {
                        if (user != null) {
                            MyApplication.userId = user.getId();
                            System.out.println("User id: " + MyApplication.userId);
                        }

                    }
                }).executeAsync().get();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (ExecutionException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            boolean isNewUser = !MyApplication.dbConnection.isUidRegistered(MyApplication.userId);
这会导致我的数据库将
null
作为uid查找。
如何解决此问题?

您应该将这部分代码:

boolean isNewUser = !MyApplication.dbConnection.isUidRegistered(MyApplication.userId);
在您的请求回调中:

 @Override
public void onCompleted(GraphUser user, Response response) {
    if (user != null) {
        MyApplication.userId = user.getId();
        System.out.println("User id: " + MyApplication.userId);

        boolean isNewUser = !MyApplication.dbConnection.isUidRegistered(MyApplication.userId);
        // here you should continue your work
    }    
}

好的,这在这种情况下有效。非常感谢。所以我是对的,我不应该在回调处理程序之外的请求之后使用来自请求的结果数据?是的,因为这是一个异步调用,您不知道结果数据何时会出现,所以这是最好的方法。如果对您有效,请接受我的回答:)好的,我只是想知道,因为我调用了get()异步请求上的。我刚刚测试了get()方法的结果,它包含了预期的值。虽然看起来onCompleted方法是在异步任务完成后被调用的,但您是对的。您不必担心get()方法,因为它不会给出您感兴趣的数据的结果。这是不对的。在您回答这个问题之前,我已经通过getGraphObjectAs将GraphHuser作为类对GraphObject进行了响应,并且得到了与onCompleted方法相同的结果。