2
votes

We can post to facebook friend's wall a text message, but how can we post an image, a picture to a friend's wall using Android Facebook SDK?

When I print out the wall variable it does show correctly USER_ID/feed. After posting the onComplete function of the RequestListener does get called, but there is nothing posted to the friends wall.

Here's example code we're trying to use:

Bundle params = new Bundle();
params.putString("method", "photos.upload");
params.putString("caption", photoCaption.getText().toString());
params.putByteArray("picture", data);

AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(facebook);

String wall = null;
wall = fArray.getJSONObject(pos).getString("id").toString() + "/feed";

mAsyncRunner.request(wall, params,"POST", new RequestListener(){

    public void onComplete(String response, Object state) {
        Log.d("text","facebook post complete");
    }

    public void onIOException(IOException e, Object state) {
        Log.d("text","facebook post onIOException");
    }

    public void onFileNotFoundException(FileNotFoundException e, Object state) {
        Log.d("text","facebook post onFileNotFoundException");
    }

    public void onMalformedURLException(MalformedURLException e, Object state) {
        Log.d("text","facebook post onMalformedURLException");
    }

    public void onFacebookError(FacebookError e, Object state) {
        Log.d("text","facebook post error");
    }

}, null);

This is how I get the list of friends:

AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(facebook);

mAsyncRunner.request("me/friends", new RequestListener(){

    public void onComplete(String response,Object state) {
    try {
        jObject = new JSONObject(response);
        fArray = jObject.getJSONArray("data"); 
2

2 Answers

3
votes

This is the method i use to post a picture to a wall, it posts a pic from a URL but you can change it to put a byte[] for the pic instead. The message appears above the picture and the caption appears to the right of the picture.

protected void postPicToWall(String userID, String msg, String caption, String picURL){
    try {
        if (isSession()) {
            String response = mFacebook.request((userID == null) ? "me" : userID);

            Bundle params = new Bundle();
            params.putString("message", msg);  
            params.putString("caption", caption);
            params.putString("picture", picURL);

            response = mFacebook.request(((userID == null) ? "me" : userID) + "/feed", params, "POST");       

            Log.d("Tests",response);
            if (response == null || response.equals("") || 
                    response.equals("false")) {
                Log.v("Error", "Blank response");
            }
        } else {
            // no logged in, so relogin
            Log.d(TAG, "sessionNOTValid, relogin");
            mFacebook.authorize(this, PERMS, new LoginDialogListener());
        }
    }catch(Exception e){
        e.printStackTrace();
    }
}

EDIT:

To post a byte[] rather than a url to a pic then replace the line

params.putString("picture", picURL); with

params.putByteArray("picture", getIntent().getExtras().getByteArray("data"));

where data is your array.

0
votes

Using bundle method.

Bundle params = new Bundle();
        params.putString("message", "Test Post from karthick");
        params.putString("caption", "Karthick kumar");

        params.putString("name", "Hai Dude");
        **params.putString("icon", "http://www.facebook.com/images/icons/default_app_icon.gif");**
        params.putString("source", link);

And Then Use... mAsyncRunner.request(wall, params,"POST", new RequestListener());