在朋友的墙上张贴照片?

时间:2012-05-09 00:24:47

标签: android facebook facebook-graph-api

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

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。 它只是在朋友的墙上显示消息,但根本没有图片。

2 个答案:

答案 0 :(得分: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 ”字段中,该字段被声明为全局变量。它使用设备上的默认图库获取图像。为了完整起见,这是从默认的Gallery应用程序中获取图像的代码。 (这会提示用户选择应用程序)

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()下的预览图像显示效果不佳。修改代码有点工作。

我觉得很奇怪的事实是,在“使用完整动作”弹出窗口中,我没有获得Astro文件管理器,也没有获得我的Galaxy S上的图库。它给了我文件管理器(离开市场,而不是股票)和Quickoffice Pro。话虽这么说,从两个仍然有效和照片的选择仍然上传。

答案 1 :(得分:0)

根据documentation,图片参数的名称不是“picture”,而是“source”

所以你的代码应该是:

Bundle postdata = new Bundle();

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

mAsyncRunner.request(usr + "/feed", postdata, "POST", new WallRequestListener(), null);