Odpowiedz

4

Najprostszym sposobem dla ciebie jest, aby wykorzystać istniejącą SDK, coś takiego:
http://github.com/facebook/facebook-android-sdk/
http://code.google.com/p/fbconnect-android/
http://wiki.developers.facebook.com/index.php/User:Android

Im bardziej elastycznym sposobem jest wdrożenie API samemu, tutaj są docs że będzie być przydatne:
http://developers.facebook.com/docs/

+2

Patrząc na interfejs API FB, nie widzę sposobu na przesłanie obrazu. Widzę tylko, że możesz podać URL obrazu jako parametr, ale nie same dane obrazu. Czy też przeoczyłem coś? –

+0

jak udostępnić więcej niż jedno zdjęcie do fb ... proszę pomóc – jyomin

15

tylko wysłana tutaj prosty sposób załadować zdjęcie:

android facebook publish photo

Kod:

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

jak dodać opis do przesłanego zdjęcia? – Maxim

+0

Nie próbowałem, ale jestem pewien, jeśli spojrzeć na dokumentację dev na Facebooku, będzie coś, co można dodać do parametrów. – trgraglia

+0

wymyśliłeś to? Część o opisie? – 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 

    } 
} 

Oto cały kod spróbować to na pewno działa dla Ciebie i to jest praca dla mnie również

+1

Co to jest BaseRequestListener? –

+0

Twój przykład działa dla mnie. Ale dodatkowo chcę opublikować prostą wiadomość z tym postem. Jak to możliwe? Dowolny pomysł ? daj odpowiedź tutaj: http://stackoverflow.com/questions/8585043/android-how-to-post-the-message-with-the-image-post-on-facebook –

+0

photos.upload nie jest przestarzałą wersją Metoda odpoczynku Api? –

3

Pomyślnie Przesłałem zdjęcia na facebooku na ścianie Użyłem następującego kodu.

W głównej aktywności wykonaj następujące czynności;

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 

    } 
} 

Z pewnością ten kod pomoże.

+0

Użyłem tego kodu, i dostał wyjątek jako java.lang.OutOfMemoryError \t w java.io.ByteArrayOutputStream.expand (ByteArrayOutputStream.java:103) \t na java.io.ByteArrayOutputStream.write (ByteArrayOutputStream .java: 234) \t na android.graphics.Bitmap.nativeCompress (metoda macierzysta) w tym wierszu bi.compress (Bitmap.CompressFormat.JPEG, 100, baos); – Manikandan

+0

authenticatedFacebook jest tym, co daje mi błąd. Pomóżcie – jyomin

+0

Człowiekowi to bardzo mi pomogło. Wielkie dzięki. – Mayur

3

Jeśli chcesz opublikować zdjęcie z opisem można to zrobić:

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 To wszystko! Dziękuję Ci. Po przeskanowaniu tak wielu osób korzystających ze starszego interfejsu API, ten w końcu pokazuje rozwiązanie Graph api. –

Powiązane problemy