Antwort

4

Der einfachste Weg für Sie ist es, die bestehenden SDK zu verwenden, so etwas wie das:
http://github.com/facebook/facebook-android-sdk/
http://code.google.com/p/fbconnect-android/
http://wiki.developers.facebook.com/index.php/User:Android

Je flexibler Weise ist die API selbst, hier zu implementieren sind die docs das wird nützlich sein:
http://developers.facebook.com/docs/

+2

Wenn ich auf die FB api schaue, sehe ich keine Möglichkeit ein Bild hochzuladen. Ich sehe nur, dass Sie eine Bild-URL als Parameter übergeben können, aber nicht die Bilddaten selbst. Oder habe ich irgendetwas übersehen? –

+0

wie Sie mehr als ein Bild zu fb teilen ... bitte Hilfe – jyomin

15

gerade gebucht hier die einfache Art und Weise ein Bild hochladen:

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

Wie kann ich dem hochgeladenen Foto eine Beschreibung hinzufügen? – Maxim

+0

Havent versucht, aber ich bin sicher, wenn Sie auf die Facebook-Entwickler schauen, wird es etwas geben, das Sie den Params hinzufügen können. – trgraglia

+0

Haben Sie das herausgefunden? Der Teil über die Beschreibung? – 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 

    } 
} 

hier wird der gesamte Code versuchen, es wird auf jeden Fall für Sie arbeiten, und es ist Arbeit für mich auch

+1

Was ist BaseRequestListener? –

+0

Ihr Beispiel funktioniert für mich. Aber in extra möchte ich die einfache Nachricht mit diesem Fotopost posten. Also wie ist es möglich? Irgendeine Idee ? Gib Antwort: http://stackoverflow.com/questions/8585043/android-how-to-post-the-message-with-the-image-post-on-facebook –

+0

photos.upload ist kein veraltetes Vermächtnis Rest Api Methode? –

3

Erfolgreich habe ich hochgeladen Fotos auf Facebook Wand Ich habe den folgenden Code verwendet.

In Ihrer Haupttätigkeit machen Sie folgendes;

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 

    } 
} 

Sicher Dieser Code wird Ihnen helfen.

+0

ich diesen Code verwendet 'BaseRequestListener' lösen, und bekam Ausnahme als java.lang.OutOfMemoryError \t bei java.io.ByteArrayOutputStream.expand (ByteArrayOutputStream.java:103) \t bei java.io.ByteArrayOutputStream.write (ByteArrayOutputStream .java: 234) \t bei android.graphics.Bitmap.nativeCompress (Native Methode) in dieser Zeile bi.compress (Bitmap.CompressFormat.JPEG, 100, baos); – Manikandan

+0

authenticatedFacebook is what..it gibt mir einen Fehler ... bitte Hilfe – jyomin

+0

Man hat mir wirklich geholfen. Danke vielmals. – Mayur

3

Wenn Sie ein Foto mit einer Beschreibung veröffentlichen möchten Sie dies tun können:

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 Das ist es! Vielen Dank. Nachdem ich so viele Leute mit der Legacy-API gesichtet habe, zeigt diese nun die Graph-API-Lösung. –