user724861
user724861

Reputation: 1074

facebook publish feed stuck on black screen after get publish permission

ok, so i want to make a new post to my user's wall. i've followed the codes provided by developers.facebook on this link https://developers.facebook.com/docs/howtos/androidsdk/3.0/publish-to-feed/

at the publish story method i add a Log to see if the program has pass the code lines:

private void publishStory() {
Session session = Session.getActiveSession();

if (session != null){

    Log.d("INFO","session is not NULL");

    // Check for publish permissions    
    List<String> permissions = session.getPermissions();
    if (!isSubsetOf(PERMISSIONS, permissions)) {

         Log.d("INFO","setting permission");

        pendingPublishReauthorization = true;
        Session.NewPermissionsRequest newPermissionsRequest = new Session
                .NewPermissionsRequest(this, PERMISSIONS);
    session.requestNewPublishPermissions(newPermissionsRequest);
        return;
    }

    Bundle postParams = new Bundle();
    postParams.putString("name", "Facebook SDK for Android");
    postParams.putString("caption", "Build great social apps and get more installs.");
    postParams.putString("description", "The Facebook SDK for Android makes it easier and faster to develop Facebook integrated Android apps.");
    postParams.putString("link", "https://developers.facebook.com/android");
    postParams.putString("picture", "https://raw.github.com/fbsamples/ios-3.x-howtos/master/Images/iossdk_logo.png");

    Log.d("INFO","finish construct message");

    Request.Callback callback= new Request.Callback() {
        public void onCompleted(Response response) {

            Log.d("INFO","on request complete!");

            JSONObject graphResponse = response
                                       .getGraphObject()
                                       .getInnerJSONObject();
            String postId = null;
            try {
                postId = graphResponse.getString("id");
            } catch (JSONException e) {
                Log.i(TAG,
                    "JSON error "+ e.getMessage());
            }
            FacebookRequestError error = response.getError();
            if (error != null) {
                Toast.makeText(getActivity()
                     .getApplicationContext(),
                     error.getErrorMessage(),
                     Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(getActivity()
                         .getApplicationContext(), 
                         postId,
                         Toast.LENGTH_LONG).show();
            }
        }
    };

    Request request = new Request(session, "me/feed", postParams, 
                          HttpMethod.POST, callback);

    RequestAsyncTask task = new RequestAsyncTask(request);
    task.execute();
}

}

the problem is that when i execute the method above the program runs well until it pops up a authenticate publish permission window and the i allowed it, the screen continues again to a black screen with indeterminate progressbar on it and then the window just dismiss by itself.

in fact, from the logcat i can conclude it doesn't make it through "on request complete" line.

why this happening? any clue?

Thanks!

Upvotes: 0

Views: 2563

Answers (2)

user724861
user724861

Reputation: 1074

oh yeah, i currently followed this solution Updated - Android Facebook api 3.0 error: Cannot call LoginActivity with a null calling package

like you said, i have added the onActivityResult like this

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
}

and it works! although i arranged the lines on a dialog class

public void createFacebookConnection() {
        Session session = new Session(MapScreen.this);
        Session.setActiveSession(session);

        Settings.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS);

        Session.StatusCallback statusCallback = new Session.StatusCallback() {
            @Override
            public void call(Session session, SessionState state, Exception exception) {
                String message = "Facebook session status changed - " + session.getState() + " - Exception: " + exception;
                Log.w("Facebook test", message);

                if (session.isOpened() || session.getPermissions().contains("publish_actions")) {
                    publishToWall();
                } else if (session.isOpened()) {
                    OpenRequest open = new OpenRequest(MapScreen.this).setCallback(this);
                    List<String> permission = new ArrayList<String>();
                    permission.add("publish_actions");
                    open.setPermissions(permission);
                    Log.w("Facebook test", "Open for publish");
                    session.openForPublish(open);
                }
            }
        };

        if (!session.isOpened() && !session.isClosed() && session.getState() != SessionState.OPENING) {
            session.openForRead(new Session.OpenRequest(MapScreen.this).setCallback(statusCallback));
        } else {
            Log.w("Facebook test", "Open active session");
            Session.openActiveSession(MapScreen.this, true, statusCallback);
        }
    }

    void publishToWall() {
        Session session = Session.getActiveSession();

        Bundle postParams = new Bundle();
        postParams.putString("name", "Merauke Android");
        postParams.putString("caption", hotelName);
        postParams.putString("description", hotelName+" is a luxury hotel which is located in the city of Bandung.");
        postParams.putString("link", "https://developers.facebook.com/android");
        postParams.putString("picture", "http://www.jejaringhotel.com/android/hotelimages/hotel-3.jpg");
        Log.i("DIALOG","feed set");

        Request.Callback callback = new Request.Callback() {
            public void onCompleted(Response response) {
                FacebookRequestError error = response.getError();
                if (error != null) {
                    Toast.makeText(MapScreen.this, error.getErrorMessage(), Toast.LENGTH_SHORT).show();
                } else {
                    JSONObject graphResponse = response.getGraphObject().getInnerJSONObject();
                    String postId = null;
                    try {
                        postId = graphResponse.getString("id");
                    } catch (JSONException e) {
                        Log.i("Facebook error", "JSON error " + e.getMessage());
                    }
                    //TODO Toast.makeText(context, postId, Toast.LENGTH_LONG).show();
                    Toast.makeText(MapScreen.this, "Posted on wall success!", Toast.LENGTH_SHORT).show();
                }
            }
        };

        Request request = new Request(Session.getActiveSession(), "me/feed", postParams, HttpMethod.POST, callback);

        RequestAsyncTask task = new RequestAsyncTask(request);
        task.execute();
    }

great thanks for your advice Ming Li! Thanks!

Upvotes: 2

Related Questions