简体   繁体   中英

Posting in Facebook wall using graph API not Working

I'm trying to post something to Facebook wall using graph API but its not working for me. It has no error but it also not posting anything on my wall.

Here is the Codes:

public class ActivityName extends Activity{


    Dialog dialog;
    Facebook fb;
    SharedPreferences sp;
    String access_token, name, email;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.success);

            String APP_ID = "MY_ID";
            fb = new Facebook(APP_ID);
            sp = getPreferences(MODE_PRIVATE);
            access_token = sp.getString("access_token", null);
            long expires = sp.getLong("access_expires", 0);

            if(access_token!= null){
                fb.setAccessToken(access_token);
            }

            if(expires != 0){
                fb.setAccessExpires(expires);
            }

        ((Button) findViewById(R.id.btn_home)).setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                // TODO Auto-generated method stub
                openContextMenu(v);

            }
        });

        ((Button) findViewById(R.id.btn_home)).setOnCreateContextMenuListener(new View.OnCreateContextMenuListener() {

            public void onCreateContextMenu(ContextMenu menu, View v,
                    ContextMenuInfo menuInfo) {
                // TODO Auto-generated method stub
                menu.setHeaderTitle("Tell the world!");
                menu.add(0, 0, 0, "Facebook");
                menu.add(0, 1, 0, "Twitter");
                menu.add(0, 2, 0, "Skip");
            }
        });

    }

    public boolean onContextItemSelected(MenuItem item) {
            AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
            .getMenuInfo();

            switch (item.getItemId()) {
            case 1:



                break;

            case 0:

                 fb.authorize(SuccessActivity.this, new String[]{ "photo_upload,user_photos,publish_checkins,publish_actions,publish_stream"},new DialogListener() {
                        public void onComplete(Bundle values) {
                            postToWall();
                        }

                        public void onFacebookError(FacebookError error) {
                        }

                        public void onError(DialogError e) {
                        }

                        public void onCancel() {
                        }
                    });



                break;


            case 2:
                Intent i = new Intent(getApplicationContext(),MainActivity.class);
                startActivity(i);
                overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.slide_out_right);


                break;
            }
            return true;
            }

    public void onBackPressed() {

   }

    @SuppressLint("SdCardPath")
    public void postToWall() {
        // post on user's wall.
         try {
                if (fb.isSessionValid()) {
                    byte[] data = null;

                     Bitmap bi = BitmapFactory.decodeFile("/sdcard/Asa.jpg");
                     ByteArrayOutputStream baos = new ByteArrayOutputStream();
                     bi.compress(Bitmap.CompressFormat.JPEG, 100, baos);
                     data = baos.toByteArray();


                     Bundle params = new Bundle();
                     params.putString(Facebook.TOKEN, fb.getAccessToken());
                     params.putString("message", "Test from Android AVD");
                     params.putByteArray("picture", data);



                     AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(fb);
                     mAsyncRunner.request("/me/feed", params,"POST", new SampleUploadListener(),null);

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

    }

    public class SampleUploadListener extends BaseRequestListener {

        public void onComplete(final String response, final Object state) {
            try {
                // process the response here: (executed in background thread)
                Log.d("Facebook-Example", "Response: " + response.toString());
                JSONObject json = Util.parseJson(response);
                final String src = json.getString("src");

                // then post the processed result back to the UI thread
                // if we do not do this, an runtime exception will be generated
                // e.g. "CalledFromWrongThreadException: Only the original
                // thread that created a view hierarchy can touch its views."

            } catch (JSONException e) {
                Log.w("Facebook-Example", "JSON Error in response");
            } catch (FacebookError e) {
                Log.w("Facebook-Example", "Facebook Error: " + e.getMessage());
            }
        }

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

}

Can anyone pint what missing or wrong in this codes? any thoughts will be highly appreciated.

Here's some code I used a little while back to do something similar:

function publishPost(session) {
var $title = $('#title').val(),
    $story = $('#story').val(),
    publish = {
        method: 'stream.publish',
        message: 'I just entered the Your Perfect Kent Day Competition.',
        picture : 'http://apps.facebook.com/perfect-kent-day/',
        link : 'http://apps.facebook.com/perfect-kent-day/',
        name: 'Enter to win or vote for your faourite story here!',
        caption: $title,
        description: $story,
        actions : { name : 'Apply for Kent Teach Jobs...', link : 'http://www.kent-       teach.com/'}
    };

    FB.api('/me/feed', 'POST', publish, function(response) {
    //alert('A post had just been published into the stream on your wall.');
        $('#before-submit').hide();
        $('#after-submit').show();
        $('#loading').fadeOut();
    });
};

And then I called the publishPost() function once a form on the page was submitted with AJAX. Hope this help!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM