从Android应用程序向Facebook发布照片,照片来自Android Gallery

从Android应用程序向Facebook发布照片,照片来自Android Gallery,android,facebook,post,image,Android,Facebook,Post,Image,我目前正在开发一个Android应用程序,目标版本是4.0冰淇淋三明治 到目前为止,我可以用以下代码在Facebook上发布普通文本: public void postToWall() { // post on user's wall. facebook.dialog(this, "feed", new DialogListener() { @Override public void onFacebookError(FacebookError e

我目前正在开发一个Android应用程序,目标版本是4.0冰淇淋三明治

到目前为止,我可以用以下代码在Facebook上发布普通文本:

public void postToWall() {

      // post on user's wall.

        facebook.dialog(this, "feed", new DialogListener() {

    @Override
    public void onFacebookError(FacebookError e) {
    }

    @Override
    public void onError(DialogError e) {
    }

    @Override
    public void onComplete(Bundle values) {
    }

    @Override
    public void onCancel() {
    }
        });

}
但是,我无法在Facebook上发布带有标题的照片。我在网上搜索过,找到的代码之一是:

public void postToWall() {
        // post on user's wall.
        byte[] data = null;

        Bitmap bi = BitmapFactory.decodeFile(photoToPost);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bi.compress(Bitmap.CompressFormat.JPEG, 100, baos);
        data = baos.toByteArray();

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

        AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(facebook);
        mAsyncRunner.request(null, params, "POST", new SampleUploadListener(), null);

    }
问题是,上面的代码不起作用,因为我不知道是什么:

1.photoToPost

2.mAsyncRunner.request不断给我一个错误,说明我不能输入“null”,因为这是一个无效的参数

3.SampleUploadListener,应该是来自FacebookSDK的,但它也不能正常工作(我在创建类时不断遇到错误)

这里有更简单的代码吗?或者有人能给我解释一下我所经历的错误吗

到目前为止,我使用“点击”将普通文本发布到Facebook上,它指向了这种方法。我的目标是上传一张带有标题的照片到Facebook上

谢谢大家的帮助

看看这个。这将向你们展示如何在FaceBook的墙上张贴图片,以及如何在墙上张贴文字


这很好学。

1-这是您的照片,将被发送到墙上,它可以是您的SD卡或其他任何地方的图像

2-这是Facebook SDK中的一个类,它接受Facebook对象(之前创建的一个u)

3-这又是一个来自Facebook SDK的类

您的Facebook SDK似乎有问题
尝试使用右键单击Project>>Properties>>Android再次设置它,查看库是否存在

mAsyncRunner.request(null, params, "POST", new SampleUploadListener(), null);
您正在将null作为图形路径传递,应该是这样的=“me/feed”

更新 写这行代码

mAsyncRunner.request("me/feed", params, "POST", new SampleUploadListener(), null); 
那么它应该会起作用

public class CardShared extends Activity{

public static final String APP_ID = "YOUR APP ID";
private Facebook mFacebook;
private AsyncFacebookRunner mAsyncRunner ;
boolean isLoggedIn = false;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
   // setContentView(R.layout.main);
    mFacebook = new Facebook(APP_ID);
    mAsyncRunner = new AsyncFacebookRunner(mFacebook);

    //Implementing SSO
    mFacebook.authorize(this, new String[]{"publish_stream"}, new DialogListener(){

        public void onComplete(Bundle values) {

            sharePicture(values.getString(Facebook.TOKEN));
            Toast.makeText(getApplicationContext(), "Picture Shared Successfully", Toast.LENGTH_SHORT).show();
            CardShared.this.finish();
        }


        public void onFacebookError(FacebookError e) {
            Log.d("FACEBOOK ERROR","FB ERROR. MSG: "+e.getMessage()+", CAUSE: "+e.getCause());
        }


        public void onError(DialogError e) {
            Log.e("ERROR","AUTH ERROR. MSG: "+e.getMessage()+", CAUSE: "+e.getCause());
        }


        public void onCancel() {
            Log.d("CANCELLED","AUTH CANCELLED");
        }
    });
}

//updating Status
public void sharePicture(String accessToken){

    byte[] data = null;
    try {
        Bitmap image = BitmapFactory.decodeResource(getResources(), R.drawable.image_to_be_uploaded);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        image.compress(Bitmap.CompressFormat.JPEG, 100, baos);
        data = baos.toByteArray();

        Bundle params = new Bundle();
        params.putString("method", "photos.upload");
        params
                .putString(Facebook.TOKEN, mFacebook
                        .getAccessToken());
        params.putByteArray("picture", data);
        mAsyncRunner.request(null, params, "POST",
                new SampleUploadListener(), null);

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

}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    Log.d("onActivityResult","onActivityResult");
    mFacebook.authorizeCallback(requestCode, resultCode, data);
}
public class SampleUploadListener extends BaseRequestListener {

    public void onComplete(final String response, final Object state) {
        try {

            Log.d("Facebook-Example", "Response: " + response.toString());
            JSONObject json = Util.parseJson(response);
            final String f = json.getString("src");

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

mAsyncRunner.request("me/feed", params, "POST", new SampleUploadListener())

你看到右边所有的相关问题了吗?1.是图像的文件对象。您可以从图库中搜索并获取图像。2.选中此项请提取必要的上传图像部分。如果引用的站点已关闭,此答案将无效。您好!谢谢你的链接。我看到了代码,它根据已经上传的图像(代码通过URL获取图像)将图像发布到Facebook墙上。虽然这不是我想要的,但我也从中学到了很多。非常感谢。好啊你想从sd卡上传照片还是什么的?嗨!谢谢你的回复!我会再检查一遍,然后再给你回复!1-那么我可以创建一个字符串变量来保存图像吗?对于其余部分,我设法获得了类代码,但仍然得到了mAsyncRunner.request的错误(“me/feed”,params,“POST”,new SampleUploadListener(),null);错误如下:类型AsyncFacebookRunner中的方法请求(String、Bundle、String、AsyncFacebookRunner.RequestListener、Object)不适用于参数(String、Bundle、String、MainActivity.SampleUploadListener、null);1-不,您不能将图像放入字符串变量中!这就是我所说的,你可以把图片的URL放到字符串中,而不是整个文件,你需要用位图来解码哦!!!好,好。我设法从我的R.drawable上贴了一张图片。现在,我正试图发布一张来自多媒体资料的图片(应该提示用户从手机的多媒体资料中选择要上传到Facebook的图片)。我将就此发表另一个问题。谢谢你好也感谢您的快速响应。我会尝试一下,让你知道我的进展再次!(我是一名高中生,所以编程对我来说还是一种新鲜事物)。嗨,我在这行图像中遇到了一个空异常错误。compress(Bitmap.CompressFormat.JPEG,100,baos);我不知道如何处理photoToPost。我把它声明为一个字符串。我很确定它是空的,但是我如何用安卓画廊的照片来填充它呢?请帮忙!谢谢我也不确定该将该方法放在何处共享,它不断出现括号错误。你有一个包含所有方法的示例类吗?现在看看我编辑的答案,这是一个完整的类。你只需要在这里输入意图,可以通过点击按钮或“上传”。现在你可以看到,位图图像是保存在你的可绘制文件夹中的图像,这个图像将被上传。你必须提供你想要上传到FaceBook上的图像的位图。嗯,我仍然对“我/订阅源”很困惑。可以再解释一下吗?编程对我来说还是新的。。。谢谢你的快速回复!:)你只要写这行而不是那行