Respuesta

4

La forma más fácil para usted es utilizar el SDK existente, algo así:
http://github.com/facebook/facebook-android-sdk/
http://code.google.com/p/fbconnect-android/
http://wiki.developers.facebook.com/index.php/User:Android

La forma más flexible es la implementación de la API de ti mismo, aquí están los documentos que se ser útiles:
http://developers.facebook.com/docs/

+2

Al mirar la aplicación FB, no veo ninguna forma de subir una imagen. Solo veo que puede pasar una URL de imagen como parámetro, pero no los datos de imagen en sí. ¿O he pasado por alto algo? –

+0

cómo compartir más de una imagen a fb ... por favor ayuda – jyomin

15

acaba de publicar aquí la forma más sencilla de subir una foto:

android facebook publish photo

Código:

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

¿cómo puedo agregar una descripción a la foto cargada? – Maxim

+0

Havent intentado, pero estoy seguro de que si buscas en los documentos de desarrollo de Facebook, habrá algo que puede agregar a los params. – trgraglia

+0

¿te diste cuenta de esto? La parte sobre la descripción? – 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 

    } 
} 

aquí está todo el código de probarlo que sin duda va a trabajar para usted y que es un trabajo para mí también

+1

¿Qué es BaseRequestListener? –

+0

Tu ejemplo funciona para mí. Pero adicionalmente quiero publicar el mensaje simple con esa publicación de fotos. Entonces, ¿cómo es posible? Alguna idea ? dar respuesta aquí .: http://stackoverflow.com/questions/8585043/android-how-to-post-the-message-with-the-image-post-on-facebook –

+0

photos.upload no es un legado en desuso Método Rest Api? –

3

éxito que he subido las fotos en la pared de Facebook Utilicé el siguiente código.

En su actividad principal haga lo siguiente;

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 

    } 
} 

Surely Este código te ayudará.

+0

He utilizado este código, y dieron como excepción java.lang.OutOfMemoryError \t en java.io.ByteArrayOutputStream.expand (ByteArrayOutputStream.java:103) \t en java.io.ByteArrayOutputStream.write (ByteArrayOutputStream .java: 234) \t en android.graphics.Bitmap.nativeCompress (método nativo) en esta línea bi.compress (Bitmap.CompressFormat.JPEG, 100, baos); – Manikandan

+0

authenticatedFacebook es lo que ... me da un error ... por favor ayuda – jyomin

+0

Hombre esto realmente me ayudó. Muchas gracias. – Mayur

3

Si desea publicar una foto con una descripción que puede hacer esto:

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 ¡Eso es todo! Gracias. Después de examinar a tantas personas que usan la API heredada, esta finalmente muestra la solución API api. –

Cuestiones relacionadas