2013-01-04 107 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