2013-01-04 52 views
0

在墙上facebook上发送照片/图片/位图的最新方式是什么?我发现所有的方法都被弃用了。最好的,如果它是从你点击按钮的那一刻起。使用SDK上传一张照片/图片到facebook

我知道有些人在该方法中使用它,并在那里将其插入?:

Request request = Request.newUploadPhotoRequest(
      session, bitmap, callback); 
    RequestAsyncTask task = new RequestAsyncTask(request); 
    task.execute(); 

(对不起,英语:P)

回答

1

你可以使用RestFB使用发出请求给Facebook Java的。您可以上传照片是这样的:

FacebookType publishMessageResponse = facebookClient.publish("me/photos", FacebookType.class, 
    BinaryAttachment.with("photo.png", new FileInputStream(selectedImagePath)), 
    ); 
+0

当你创建facebookClient = new DefaultFacebookClient(accessToken); accessToken是什么? (对不起英文:P) – Maury

+0

如果你有一个开放的Facebook会话,你可以使用'session.getAccessToken()'获得访问令牌。 –

+0

我发现这AccessToken accessToken = 新的DefaultFacebookClient()。obtainAppAccessToken(MY_APP_ID,MY_APP_SECRET),但现在我有错误java.lang.NoClassDefFoundError:com.restfb.DefaultFacebookClient – Maury

1

首先下载this Facebbok SDK并将其包含在您的项目库项目。

在你的活动,在那里你要共享的图像::

private static Bitmap b; 
private static Facebook mFacebook; 
private static AsyncFacebookRunner mAsyncRunner; 
String[] permissions = {"photo_upload" }; 
final static int AUTHORIZE_ACTIVITY_RESULT_CODE = 0; 

在的onCreate()初始化这个变量::

if (Constant.FACEBOOK_APP_ID == null) 
{ 
     Util.showAlert(this, "Warning", "Facebook Applicaton ID must be " 
         + "specified before running this example: see FbAPIs.java"); 
     return; 
} 

mHandler=new Handler(); 
mFacebook = new Facebook(Constant.FACEBOOK_APP_ID); 
mAsyncRunner = new AsyncFacebookRunner(mFacebook); 
SessionStore.restore(mFacebook, this); 


@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    switch (requestCode) 
    { 
     case AUTHORIZE_ACTIVITY_RESULT_CODE: 
     { 
     mFacebook.authorizeCallback(requestCode, resultCode, data); 
     break; 
     } 
    } 
} 

从你要去哪里共享图片onButtonClick ::

if (!mFacebook.isSessionValid()) 
{ 
    mFacebook.authorize(TabNoteActivity.this, permissions, AUTHORIZE_ACTIVITY_RESULT_CODE, new LoginDialogListener()); 
} 
else 
{ 
    Bundle params = new Bundle(); 
    ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
    Utils.b.compress(Bitmap.CompressFormat.PNG, 100, stream);//Here I am convert the JPG image into bitmap using declaring method in the Utils class 
    byte[] byteArray = stream.toByteArray(); 
    params.putString (Facebook.TOKEN, mFacebook.getAccessToken()); 
    params.putString ("message"," Facebook App Testing"); 
    params.putByteArray("picture",byteArray); 
    mAsyncRunner.request("me/photos", params,"POST", new PhotoUploadListener(),null); 
} 


    public class PhotoUploadListener extends BaseRequestListener 
    { 
     //@Override 
     public void onComplete(final String response, final Object state) 
     { 

      mHandler.post(new Runnable() 
      { 
      // @Override 
      public void run() 
      { 
       Toast.makeText(Activity.this,"Image has been shared Successfully",Toast.LENGTH_LONG).show(); 
      } 
      }); 
     } 

     public void onFacebookError(FacebookError error) 
     { 
      Toast.makeText(getApplicationContext(), "Facebook Error: " + error.getMessage(),Toast.LENGTH_LONG).show(); 
     } 
} 
+0

我有几个问题: 哪个类应该处理程序() - Android.os? - Java.util.logging? 我仍然强调: SessionStore,LoginDialogListener,mAsyncRunner.request(“me/photos”,params,“POST”,new PhotoUploadListener(),null)< - 这里只有请求,BaseRequestListener – Maury

+0

你应该导入android.os。什么突出SessionStore,LoginDialogListener?张贴一些培训相关的错误以及代码中要实现这个东西:) – AndroidLearner