2012-05-19 28 views
-3

我想上传图片从SD卡到Facebook。我尝试了很多,但我无法取得成功。我该怎么办?如何将图片从sdcard上传到Facebook墙?

我的代码是:

<tr> 
Bundle params = new Bundle(); 
params.putString("message", "Uploaded on " + now()); 
params.putByteArray("picture", bytes); //bytes contains photo bytes, no problem here 
asyncRunner.request("me/photos", params, "POST", new PostPhotoRequestListener(), null); 
</tr> 
+0

的可能重复[安卓:上传照片,从SD卡的Facebook墙上(http://stackoverflow.com /问题/ 6894133/Android的上传,照片,从-SD卡到Facebook的墙) –

回答

2

复制了此LINK的解决方案。 您应该使用Facebook API http://developers.facebook.com/docs/guides/mobile/#android。然后用这个代码:

byte[] data = null; 
try { 
    FileInputStream fis = new FileInputStream(PATH_TO_FILE); 
    Bitmap bi = BitmapFactory.decodeStream(fis); 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    bi.compress(Bitmap.CompressFormat.JPEG, 100, baos); 
    data = baos.toByteArray(); 
    } catch (FileNotFoundException e) { 
    e.printStackTrace(); 
    Log.d("onCreate", "debug error e = " + e.toString()); 
    }  

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

    Facebook facebook = new Facebook(FACEBOOK_APP_ID); 
    AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(facebook); 
    mAsyncRunner.request(null, params, "POST", new RequestListener() { 

     public void onMalformedURLException(MalformedURLException e, Object state) { 
      Log.d("request RequestListener", "debug onMalformedURLException"); 
     } 

     public void onIOException(IOException e, Object state) { 
      Log.d("request RequestListener", "debug onIOException"); 
     } 

     public void onFileNotFoundException(FileNotFoundException e, Object state) { 
      Log.d("request RequestListener", "debug onFileNotFoundException"); 
     } 

     public void onFacebookError(FacebookError e, Object state) { 
      Log.d("request RequestListener", "debug onFacebookError"); 
     } 

     public void onComplete(String response, Object state) { 
      Log.d("request RequestListener", "debug onComplete"); 
     } 
    }, null); 

要确保你的应用程序有权限互联网和SD卡读取

0

我已经回答过类似的问题上所以在这里:https://stackoverflow.com/a/10561377/450534

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

中提到的链接的答案是上传照片到朋友壁。但与我的ID而不是朋友ID相同的代码基本上是相同的任务,你想要的。希望这对你也有帮助。

编辑:在第一段代码,这里与您的ID替换此,你也可以拨打电话到"me/photos&access_token="。其余部分保持不变。

相关问题