Répondre

4

La meilleure façon pour vous est d'utiliser le SDK existant, quelque chose comme ça:
http://github.com/facebook/facebook-android-sdk/
http://code.google.com/p/fbconnect-android/
http://wiki.developers.facebook.com/index.php/User:Android

La façon plus souple est de mettre en œuvre l'API vous-même, voici les documents qui seront être utile:
http://developers.facebook.com/docs/

+2

En regardant l'API FB, je ne vois aucun moyen de télécharger une image. Je vois seulement que vous pouvez passer une URL d'image en tant que paramètre, mais pas les données d'image elle-même. Ou ai-je négligé quelque chose? –

+0

comment partager plus d'une image à fb..please help – jyomin

15

Juste ici la manière posté simple à télécharger une photo:

android facebook publish photo

Code:

byte[] data = null; 

Bitmap bi = BitmapFactory.decodeFile(photoToPost); 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
bi.compress(Bitmap.CompressFormat.JPEG, 100, baos); 
data = baos.toByteArray(); 

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

AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(facebook); 
mAsyncRunner.request(null, params, "POST", new SampleUploadListener(), null); 
+0

comment puis-je ajouter une description à la photo téléchargée? – Maxim

+0

Havent essayé mais je suis sûr que si vous regardez sur les doc de développement facebook, il y aura quelque chose que vous pouvez ajouter aux paramètres. – trgraglia

+0

avez-vous compris? La partie sur la description? – ekawas

8
facebook.authorize(FbdemoActivity.this, new String[]{ "user_photos,publish_checkins,publish_actions,publish_stream"},new DialogListener() { 
        @Override 
        public void onComplete(Bundle values) { 



        } 

        @Override 
        public void onFacebookError(FacebookError error) { 
        } 

        @Override 
        public void onError(DialogError e) { 
        } 

        @Override 
        public void onCancel() { 
        } 
       }); 


public void postImageonWall() { 

      byte[] data = null; 

      Bitmap bi = BitmapFactory.decodeFile("/sdcard/viewitems.png"); 
      ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
      bi.compress(Bitmap.CompressFormat.JPEG, 100, baos); 
      data = baos.toByteArray(); 


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

      AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(facebook); 
      mAsyncRunner.request(null, params, "POST", new SampleUploadListener(), null); 


    } 


public class SampleUploadListener extends BaseRequestListener { 

    public void onComplete(final String response, final Object state) { 
     try { 
      // process the response here: (executed in background thread) 
      Log.d("Facebook-Example", "Response: " + response.toString()); 
      JSONObject json = Util.parseJson(response); 
      final String src = json.getString("src"); 

      // then post the processed result back to the UI thread 
      // if we do not do this, an runtime exception will be generated 
      // e.g. "CalledFromWrongThreadException: Only the original 
      // thread that created a view hierarchy can touch its views." 

     } catch (JSONException e) { 
      Log.w("Facebook-Example", "JSON Error in response"); 
     } catch (FacebookError e) { 
      Log.w("Facebook-Example", "Facebook Error: " + e.getMessage()); 
     } 
    } 

    @Override 
    public void onFacebookError(FacebookError e, Object state) { 
     // TODO Auto-generated method stub 

    } 
} 

ici est le code tout l'essayer il vraiment travailler pour vous et il est un travail pour moi aussi

+1

Qu'est-ce que BaseRequestListener? –

+0

Votre exemple fonctionne pour moi. Mais en plus je veux poster le message simple avec ce post photo. Alors, comment c'est possible? Une idée ? répondez ici: http://stackoverflow.com/questions/8585043/android-how-to-post-the-message-with-the-image-post-on-facebook –

+0

photos.upload n'est pas un héritage obsolète Reposer la méthode Api? –

3

avec succès je l'ai téléchargé les photos disponibles sur le mur facebook J'ai utilisé le code suivant.

Dans votre activité principale, procédez comme suit;

btn1.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      authenticatedFacebook.authorize(Facebooktest2Activity.this, new String[]{ "user_photos,publish_checkins,publish_actions,publish_stream"},new DialogListener() { 
        @Override 
        public void onComplete(Bundle values) { 
         postImage(); 
         Toast.makeText(getApplicationContext(), "Image Posted on Facebook.", Toast.LENGTH_SHORT).show(); 


        } 

        @Override 
        public void onFacebookError(FacebookError error) { 
        } 

        @Override 
        public void onError(DialogError e) { 
        } 

        @Override 
        public void onCancel() { 
        } 

    }); 


     } 
}); 






} 

public void postImage(){ 
    byte[] data = null;    

     Bitmap bi = BitmapFactory.decodeFile("/sdcard/img.jpg"); 
     //Bitmap bi = BitmapFactory.decodeResource(getResources(), R.drawable.icon);    
     ByteArrayOutputStream baos = new ByteArrayOutputStream();    
     bi.compress(Bitmap.CompressFormat.JPEG, 100, baos);    
     data = baos.toByteArray();     
     Bundle params = new Bundle();    
     params.putString(Facebook.TOKEN, authenticatedFacebook.getAccessToken());    
     params.putString("method", "photos.upload");    
     params.putByteArray("picture", data);    
     AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(authenticatedFacebook);    
     mAsyncRunner.request(null, params, "POST", new SampleUploadListener(), null); 

} 


public class SampleUploadListener extends BaseKeyListener implements RequestListener { 

    public void onComplete(final String response, final Object state) { 
     try { 
      // process the response here: (executed in background thread) 
      Log.d("Facebook-Example", "Response: " + response.toString()); 
      JSONObject json = Util.parseJson(response); 
      final String src = json.getString("src"); 

      // then post the processed result back to the UI thread 
      // if we do not do this, an runtime exception will be generated 
      // e.g. "CalledFromWrongThreadException: Only the original 
      // thread that created a view hierarchy can touch its views." 

     } catch (JSONException e) { 
      Log.w("Facebook-Example", "JSON Error in response"); 
     } catch (FacebookError e) { 
      Log.w("Facebook-Example", "Facebook Error: " + e.getMessage()); 
     } 
    } 

    public void onFacebookError(FacebookError e, Object state) { 
     // TODO Auto-generated method stub 

    } 

    public Bitmap getInputType(Bitmap img) { 
     // TODO Auto-generated method stub 
     return img; 
    } 

    @Override 
    public int getInputType() { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    @Override 
    public void onIOException(IOException e, Object state) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onFileNotFoundException(FileNotFoundException e, 
      Object state) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onMalformedURLException(MalformedURLException e, 
      Object state) { 
     // TODO Auto-generated method stub 

    } 
} 

Sûrement Ce code vous aidera.

+0

J'ai utilisé ce code, et a obtenu exception comme java.lang.OutOfMemoryError \t à java.io.ByteArrayOutputStream.expand (ByteArrayOutputStream.java:103) \t à java.io.ByteArrayOutputStream.write (ByteArrayOutputStream .java: 234) \t à android.graphics.Bitmap.nativeCompress (méthode native) dans cette ligne bi.compress (Bitmap.CompressFormat.JPEG, 100, baos); – Manikandan

+0

authenticFacebook est ce que .. il me donne une erreur..please help – jyomin

+0

Homme cela m'a vraiment aidé. Merci beaucoup. – Mayur

3

Si vous souhaitez publier une photo avec une description que vous pouvez faire ceci:

public void publishPhoto(byte[] imgData, string message) { 

AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner (facebook); 

Bundle parameters = new Bundle(); 
parameters.putString (Facebook.TOKEN, facebook.getAccessToken()); 
parameters.putString ("message", message); 
parameters.putByteArray ("source", imgData); 

mAsyncRunner.Request ("me/photos", parameters, "POST", new RequestListener(), null); 
} 
+1

+1 C'est tout! Je vous remercie. Après avoir passé en revue tant de personnes utilisant l'API existante, celle-ci montre finalement la solution Graph api. –