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

回答

0

按照documentation的图片设置参数的名称是不是“图片报”“源”

所以,你的代码应该是:

Bundle postdata = new Bundle(); 

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

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

似乎没有更好的工作,我得到了同样的结果。 – Slacker616

+0

等待,您正试图张贴到用户供稿,该路径不期望图片。如果您检查[文档](http://developers.facebook.com/docs/reference/api/user/#posts),您会看到“图片”参数是一个字符串。你想做什么?张贴图片到墙上的照片? –

+0

是的,其实我使用第一个代码与“图片”参数上传图片到用户的墙上,但我这样做获得墙专辑ID,但现在我想张贴在用户的朋友墙上的图片。 – Slacker616

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。这就是说,从两个仍然作品和照片的选择仍然上传。

+0

谢谢,我会试试看,并让你知道。 – Slacker616

+0

当然可以。只要从上面的代码中取得正确的部分,它应该是好的。 –

+0

非常感谢你的队友。我只需要改变这一行:“usrID/photos&access_token =”我使用的是“usrID/feed”。 – Slacker616

相关问题