2

是否可以在朋友的墙上张贴图片?我正在使用这段代码:

Bundle postdata = new Bundle();
postdata.putString("message", msg);
postdata.putByteArray("picture", pic);
// this code, i found it in another questions but it doesn't
// seem to help much:
postdata.putString("target_id", usr);
// then i  use the Asynchronous request.
mAsyncRunner.request(usr+"/feed", postdata, "POST",new WallRequestListener(), null);

其中pic是图片作为 byteArray 并且usr是朋友的 ID。它只是在朋友的墙上显示消息,但根本没有图片。

4

2 回答 2

1

这是我在我的应用程序中使用的。它有效。

protected void uploadPhoto() {
    if (!Utility.mFacebook.isSessionValid()) {
        Util.showAlert(this, "Warning", "You must first log in.");
    } else {
        if (targetUri != null) {
            Bundle params = new Bundle();
            try {
                params.putByteArray("photo", Utility.scaleImage(getApplicationContext(), targetUri));
            } catch (Exception e) {
                e.printStackTrace();
            }
            params.putString("caption", txtPhotoCaption.getText().toString());
            Utility.mAsyncRunner.request( "replace this with the users ID"+ "/photos&access_token=" + Utility.mFacebook.getAccessToken(), 
                    params, "POST", new PhotoUploadListener(), null);
            txtPhotoCaption.setText("");
            Toast.makeText(getApplicationContext(), "Photo uploaded successfully", Toast.LENGTH_SHORT).show();
            this.finish();
        }
    }
}

请注意,我使用的方法与示例应用程序中使用的方法相同。没有涉及缩放或不缩放图像的利弊。“标题”属性是从 EditText 中提取的。实际图像位于“ targetUri ”字段中,该字段被声明为全局变量。它使用设备上的默认图库来获取图像。为了完整起见,这是从默认图库应用程序中获取图像的代码。(这会提示用户选择应用程序)

btnAddPhoto.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent = new Intent(Intent.ACTION_PICK,
                        android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                startActivityForResult(intent, 0);
            }
        });

它在onActivityResult()这里处理:

注意我还将 ImageView 中的选定图像设置为登录用户的预览

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        super.onActivityResult(requestCode, resultCode, data);

        Bitmap bitmap = null;
        if (resultCode == RESULT_OK)    {
            targetUri = data.getData();
            Log.e("IMG URI", targetUri.toString());
            try {
                bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(targetUri));
                try {
                    Utility.scaleImage(getApplicationContext(), targetUri);
                    imgDisplaySelectedImage.setImageBitmap(bitmap);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        }
    }

在我在这里发布代码作为答案之前,我再次测试了上传到朋友墙的内容。它确实有效。希望这对您也有帮助。

编辑:

正如最新评论中提到的,使用 Intent.ACTION_GET_CONTENT 与 onActivityResult() 下的预览图像显示效果不佳。修改代码有点工作。

我觉得奇怪的是,在“使用完成操作”弹出窗口中,我没有在我的 Galaxy S 上获得 Astro 文件管理器或画廊。它给了我文件管理器(市场外,而不是股票)和 Quickoffice Pro . 话虽如此,两者的选择仍然有效,照片仍然上传。

于 2012-05-12T05:42:14.070 回答
0

根据文档,图片的参数名称不是"picture"而是"source"

所以你的代码应该是:

Bundle postdata = new Bundle();

postdata.putString("message", msg);
postdata.putByteArray("source", pic);

mAsyncRunner.request(usr + "/feed", postdata, "POST", new WallRequestListener(), null);
于 2012-05-09T06:45:30.890 回答