【问题标题】:Upload photo to Facebook with Facebook Android SDK in Android在 Android 中使用 Facebook Android SDK 将照片上传到 Facebook
【发布时间】:2023-03-07 10:09:01
【问题描述】:

我是 Android 新手。我正在通过授权搜索加载照片到 facebook,获取 access_token。这个怎么做?请给我一个Java示例代码。

【问题讨论】:

  • Sanjana,你应该接受一个答案。它可以帮助您和其他在 Stack Overflow 上提供帮助的人。谢谢。

标签: android facebook photo facebook-android-sdk facebook-java-api


【解决方案1】:

刚刚在这里发布了上传照片的简单方法:

android facebook publish photo

代码:

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

【讨论】:

  • 如何为上传的照片添加说明?
  • 没有尝试过,但我确定如果您查看 facebook 开发文档,您可以将一些内容添加到参数中。
  • 你发现了吗?关于描述的部分?
  • 我没有。对不起。我现在一直忙于其他项目。你有得到它的任何地方吗?
  • params.putString("caption", "description here");用于添加描述
【解决方案2】:
facebook.authorize(FbdemoActivity.this, new String[]{ "user_photos,publish_checkins,publish_actions,publish_stream"},new DialogListener() {
                    @Override
                    public void onComplete(Bundle values) {



                    }

                    @Override
                    public void onFacebookError(FacebookError error) {
                    }

                    @Override
                    public void onError(DialogError e) {
                    }

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


public void postImageonWall() {

           byte[] data = null;

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


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

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


    }


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) {
        // TODO Auto-generated method stub

    }
}

这是整个代码,试试吧,它肯定对你有用,对我也有用

【讨论】:

  • 什么是 BaseRequestListener ?
  • 你的例子对我有用。但另外我想用那张照片发布简单的信息。那么怎么可能呢?任何想法 ?在这里给出答案。:stackoverflow.com/questions/8585043/…
  • photos.upload 不是已弃用的 Legacy Rest Api 方法?
  • 此代码确实适用于以下注意事项。 1. 我将 facebook.authorize() 调用放在 onClick() 中。我将其他 2 种方法添加到我现有的活动中。 2. 每次应用运行多次重复上传会导致内存不足。
  • android 无法识别 BaseRequestListener。这个类存在哪里?我需要一个完整的代码。我不知道 facebook 对象来自哪里?例如 facebook.authorize()
【解决方案3】:

对您来说最简单的方法是使用现有的 SDK,例如:
http://github.com/facebook/facebook-android-sdk/
http://code.google.com/p/fbconnect-android/
http://wiki.developers.facebook.com/index.php/User:Android

更灵活的方法是自己实现 API,以下是有用的文档:
http://developers.facebook.com/docs/

【讨论】:

  • 查看FB api,我没有看到任何上传图片的方法。我只看到您可以将图像 URL 作为参数传递,但不能传递图像数据本身。还是我忽略了什么?
  • 如何将多个图像分享到 fb..请帮助
【解决方案4】:

如果您想发布带有描述的照片,您可以这样做:

public void publishPhoto(byte[] imgData, string message) {

AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner (facebook);

Bundle parameters = new Bundle ();
parameters.putString (Facebook.TOKEN, facebook.getAccessToken());
parameters.putString ("message", message);
parameters.putByteArray ("source", imgData);

mAsyncRunner.Request ("me/photos", parameters, "POST", new RequestListener (), null);
}

【讨论】:

  • +1 就是这样!谢谢你。筛选了这么多使用legacy api的人,这一次终于展示了Graph api的解决方案。
【解决方案5】:

我已成功将照片上传到 Facebook 墙上 我使用了以下代码。

在您的主要活动中执行以下操作;

btn1.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            authenticatedFacebook.authorize(Facebooktest2Activity.this, new String[]{ "user_photos,publish_checkins,publish_actions,publish_stream"},new DialogListener() {
                    @Override
                    public void onComplete(Bundle values) {
                        postImage();
                        Toast.makeText(getApplicationContext(), "Image Posted on Facebook.", Toast.LENGTH_SHORT).show();


                    }

                    @Override
                    public void onFacebookError(FacebookError error) {
                    }

                    @Override
                    public void onError(DialogError e) {
                    }

                    @Override
                    public void onCancel() {
                    }

    });


        }
});






}

public void postImage(){
     byte[] data = null;               

        Bitmap bi = BitmapFactory.decodeFile("/sdcard/img.jpg");
        //Bitmap bi = BitmapFactory.decodeResource(getResources(), R.drawable.icon);             
        ByteArrayOutputStream baos = new ByteArrayOutputStream();              
        bi.compress(Bitmap.CompressFormat.JPEG, 100, baos);              
        data = baos.toByteArray();                
        Bundle params = new Bundle();              
        params.putString(Facebook.TOKEN, authenticatedFacebook.getAccessToken());              
        params.putString("method", "photos.upload");              
        params.putByteArray("picture", data);               
        AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(authenticatedFacebook);              
        mAsyncRunner.request(null, params, "POST", new SampleUploadListener(), null);   

}


public class SampleUploadListener extends BaseKeyListener implements RequestListener {

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

    public void onFacebookError(FacebookError e, Object state) {
        // TODO Auto-generated method stub

    }

    public Bitmap getInputType(Bitmap img) {
        // TODO Auto-generated method stub
        return img;
    }

    @Override
    public int getInputType() {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public void onIOException(IOException e, Object state) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onFileNotFoundException(FileNotFoundException e,
            Object state) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onMalformedURLException(MalformedURLException e,
            Object state) {
        // TODO Auto-generated method stub

    }
}

这个代码肯定会对你有所帮助。

【讨论】:

  • 我使用了这段代码,在 java.io.ByteArrayOutputStream.expand(ByteArrayOutputStream.java:103) 在 java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java: 234) 在 android.graphics.Bitmap.nativeCompress(Native Method) 这一行 bi.compress(Bitmap.CompressFormat.JPEG, 100, baos);
  • authenticatedFacebook 是什么..它给我一个错误..请帮助
  • 这对我很有帮助。非常感谢。
  • 如果我们必须向 facebook 分享多于一张图片怎么办..请帮助
猜你喜欢
  • 1970-01-01
  • 2012-03-11
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多