1

I have this class:

public class FacebookShare extends Activity implements DialogListener {
    Facebook facebook = new Facebook("199622693386109");
    Bitmap bitmap;
    byte [] data;

    @Override
    public void onCreate(Bundle savedInstanceState) 
    {    
        Bundle parameters = new Bundle();
        parameters.putString("message", "Test Photo");
        parameters.putByteArray("picture", data);
        facebook.dialog(this, "stream.publish", parameters, this);
        facebook.authorize(this, new DialogListener()
        {
            public void onComplete(Bundle values) {}
            public void onFacebookError(FacebookError error) {}
            public void onError(DialogError e) {}
            public void onCancel() {}

        });
    }
}

but if I run this code, my app crashes. Please help.

Smi
  • 13,850
  • 9
  • 56
  • 64
Rajan
  • 81
  • 2
  • 11
  • ndroid.app.ActivityThread.main(ActivityThread.java:4363) 04-27 15:05:49.716: ERROR/AndroidRuntime(2595): at java.lang.reflect.Method.invokeNative(Native Method) 04-27 15:05:49.716: ERROR/AndroidRuntime(2595): at java.lang.reflect.Method.invoke(Method.java:521) 04-27 15:05:49.716: ERROR/AndroidRuntime(2595): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) – Rajan Apr 27 '11 at 09:42
  • are you using facebook API..? – Niranj Patel Apr 27 '11 at 09:45
  • yes i have send photo in facebook from live image url but i have to upload photo from gellery i have try but not succeded. – Rajan Apr 27 '11 at 09:49

2 Answers2

0

we can upload photos using Facebook graph API with Multipart. I am using retrofit library for network call

public interface ApiInterface {
    @Multipart
    @POST("/{id}/photos")
    Call<UserModelResponse> uploadPhoto(@Part MultipartBody.Part image, @Path("id")String pageId, @Query("access_token") String token);
}

can upload multiple images

public class ApiCall {


private ApiInterface apiService;
private Context context;

public ApiCall(Context context) {
    this.context = context;
}

public ApiInterface getRetroFitService() {
    HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
    interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
    OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor).build();

    Gson gson = new GsonBuilder().create();

    Retrofit builder = new Retrofit.Builder()
            .baseUrl("https://graph.facebook.com")
            .client(client)
            .addConverterFactory(GsonConverterFactory.create(gson))
            .build();

    apiService = builder.create(ApiInterface.class);
    return apiService;
}

public void uploadImageToFBPage(String pageId, ArrayList<Parcelable> path) throws IOException {

    for (Parcelable parcelable : path) {
        MultipartBody.Part body = prepareFilePart("source", (Uri) parcelable);
        SharedPreferences sharedPreferences = context.getSharedPreferences(PREFERENCE, Context.MODE_PRIVATE);
        String token = sharedPreferences.getString("token", "");
        Call<UserModelResponse> call = apiService.uploadPhoto(body, pageId, token);
        call.enqueue(new Callback<UserModelResponse>() {
            @Override
            public void onResponse
                    (Call<UserModelResponse> call, Response<UserModelResponse> response) {
                if (response.errorBody() == null) {
                    Toast.makeText(context, "Image upload Success", Toast.LENGTH_SHORT).show();
                } else {
                    onFailure(call, new Exception());
                }
            }

            @Override
            public void onFailure(Call<UserModelResponse> call, Throwable t) {
                Toast.makeText(context, "Image upload Fail", Toast.LENGTH_SHORT).show();
            }
        });
    }
}


@NonNull
private MultipartBody.Part prepareFilePart(String partName, Uri fileUri) {
    // https://github.com/iPaulPro/aFileChooser/blob/master/aFileChooser/src/com/ipaulpro/afilechooser/utils/FileUtils.java
    // use the FileUtils to get the actual file by uri
    File file = FileUtils.getFile(context, fileUri);

    // create RequestBody instance from file
    RequestBody requestFile = RequestBody.create(MediaType.parse(context.getContentResolver().getType(fileUri)), file);

    // MultipartBody.Part is used to send also the actual file name
    return MultipartBody.Part.createFormData(partName, file.getName(), requestFile);

}
 }
Rinkesh
  • 3,150
  • 28
  • 32
0
parameters.putByteArray("picture", data);

data is your byte array of image....

and follow this link i did answer in this question....

Community
  • 1
  • 1
Niranj Patel
  • 32,980
  • 10
  • 97
  • 133