【问题标题】:Android how to post picture to friend's wall with facebook android sdkAndroid 如何使用 facebook android sdk 将图片发布到朋友的墙上
【发布时间】:2011-10-05 01:28:09
【问题描述】:

我们可以在facebook朋友的墙上发布一条短信,但是我们如何使用Android Facebook SDK在朋友的墙上发布图片,图片呢?

当我打印出墙变量时,它确实正确显示了 USER_ID/feed。发布后 RequestListener 的 onComplete 函数确实被调用,但没有任何内容发布到朋友墙。

这是我们尝试使用的示例代码:

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);

这就是我获取朋友列表的方式:

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"); 

【问题讨论】:

    标签: android facebook facebook-graph-api


    【解决方案1】:

    这是我用来将图片发布到墙上的方法,它从 URL 发布图片,但您可以将其更改为为图片添加 byte[]。消息显示在图片上方,标题显示在图片右侧。

    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();
        }
    }
    

    编辑:

    将 byte[] 而不是 url 发布到图片,然后替换该行

    params.putString("picture", picURL);

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

    data 是你的数组。

    【讨论】:

    • 您使用什么方法来发布 byte[] 而不是 URL?
    • 查看我添加到答案底部的编辑。但我知道发布 byte[] 存在错误,所以不确定它是否已修复 - 自从我尝试以来已经有几个月了!让我知道它是否工作正常。
    • 我什至不确定这是一个“错误”还是只是典型的愚蠢的 Facebook 实现。它不适用于方法 me/feed。它确实适用于 me/photos 方法,但它并不是真正的墙贴,它只是进入用户的画廊(可能会或可能不会最终出现在他们的墙上)。
    【解决方案2】:

    使用捆绑方法。

    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);
    

    然后使用... mAsyncRunner.request(wall, params,"POST", new RequestListener());

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-20
      相关资源
      最近更新 更多