2012-06-18 2 views
1

Я хочу загрузить изображение с SD-карты на Facebook. Изображение можно размещать на Facebook по URL-адресу, но оно не отправляется, если я передаю изображение с SD-карты.Загрузить изображение из sdcard на facebook- Android

Я прохожу byteArray вместо строки для загрузки изображения, но я не получаю вывод. Может ли кто-нибудь помочь мне решить эту проблему?

Мой код:

byte[] data = null;   
    params.putString(Facebook.TOKEN, facebook.getAccessToken()); 
    params.putString("link", "https://www.facebook.com/pages/My-Short-Sale-Score/242779072468511"); 
    params.putByteArray("picture",data); 

    Facebook facebook = new Facebook("318633718220473"); 

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

    facebook.dialog(this, "stream.publish", params, 

       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 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) {  
     } 
} 
+0

может уйти ошибка logcat! – Dinesh

+0

Вам нужно отправить изображение из ссылки? – Venky

+0

No.i хочу отправить изображение с SD-карты .. @Venky –

ответ

1

Попробуйте эти Facebook примеры с открытым исходным кодом:

https://github.com/facebook/facebook-android-sdk

в этом примере под hackbook для загрузки фотографий на Facebook из SDCard!

(или)

Попробуйте этот код для загрузки изображения на Facebook из SDCard

byte[] data = null; 
try { 
    FileInputStream fis = new FileInputStream(PATH_TO_FILE); 
    Bitmap bi = BitmapFactory.decodeStream(fis); 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    bi.compress(Bitmap.CompressFormat.JPEG, 100, baos); 
    data = baos.toByteArray(); 
    } catch (FileNotFoundException e) { 
    e.printStackTrace(); 
    Log.d("onCreate", "debug error e = " + e.toString()); 
    }  

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

    Facebook facebook = new Facebook(FACEBOOK_APP_ID); 
    AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(facebook); 
    mAsyncRunner.request(null, params, "POST", new RequestListener() { 

     public void onMalformedURLException(MalformedURLException e, Object state) { 
      Log.d("request RequestListener", "debug onMalformedURLException"); 
     } 

     public void onIOException(IOException e, Object state) { 
      Log.d("request RequestListener", "debug onIOException"); 
     } 

     public void onFileNotFoundException(FileNotFoundException e, Object state) { 
      Log.d("request RequestListener", "debug onFileNotFoundException"); 
     } 

     public void onFacebookError(FacebookError e, Object state) { 
      Log.d("request RequestListener", "debug onFacebookError"); 
     } 

     public void onComplete(String response, Object state) { 
      Log.d("request RequestListener", "debug onComplete"); 
     } 
    }, null); 

Примечание: Вы должны установить разрешение на доступ в Интернет и SDCARD чтения файла манифеста XML на вашем проекте

+0

Ссылка, которую вы отправили github также отображает изображение из URL-адреса не из sdcard .. public static final String HACK_ICON_URL = "http://www.facebookmobileweb.com/hackbook/img/facebook_icon_large.png"; –

+0

может отправить сообщение об ошибке – Dinesh

+0

Я обновляю ответ, попробуйте это – Dinesh

2

Создать файл Объект из Путь к файлу на вашей SD-карте, например

File ff = new File("Your sdcard file path"); 
     bb = decode(ff); 
    }  
    ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
    bb.compress(Bitmap.CompressFormat.PNG, 100, stream); 
    byte[] byteArray = stream.toByteArray(); 
    Bundle params = new Bundle(); 
    params.putString("method", "photos.upload"); 
    params.putString("caption", msg); 
    params.putByteArray("image", byteArray); 
    try { 

     facebook.request("me/feed", params, "POST"); 

    } catch (FileNotFoundException fileNotFoundException) { 
     fileNotFoundException.printStackTrace(); 
    } catch (MalformedURLException malformedURLException) { 
     malformedURLException.printStackTrace(); 
    } catch (IOException ioException) { 
     ioException.printStackTrace(); 
    } 
    AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(facebook); 
    mAsyncRunner.request(null, params, "POST", new SampleUploadListener(), 
      null); 

// code for decode method 

private Bitmap decode(File f) { 
    try { 
     //Decode image size 
     BitmapFactory.Options o = new BitmapFactory.Options(); 
     o.inJustDecodeBounds = true; 
     BitmapFactory.decodeStream(new FileInputStream(f),null,o); 

     //The new size we want to scale to 
     final int REQUIRED_SIZE=70; 

     //Find the correct scale value. It should be the power of 2. 
     int scale=1; 
     while(o.outWidth/scale/2>=REQUIRED_SIZE && o.outHeight/scale/2>=REQUIRED_SIZE) 
      scale*=2; 

     //Decode with inSampleSize 
     BitmapFactory.Options o2 = new BitmapFactory.Options(); 
     o2.inSampleSize=scale; 
     return BitmapFactory.decodeStream(new FileInputStream(f), null, o2); 
    } catch (FileNotFoundException e) {} 

    return null; 
} 
Смежные вопросы