2011-08-23 31 views
2

可能重复:
Is uploading videos from an SD Card to Facebook possible with the Facebook SDK?通过视频我的Android应用

我想分享在Facebook上的视频,虽然我的Android应用程序。

我贴了一堵墙,虽然我的应用程序,它工作正常。现在我正试图在Facebook上分享视频。所以我尝试了下面的代码。

Facebook facebook; 

    String FB_APP_ID=APP_ID; 

    byte[] data = null; 
    Uri uri=Uri.fromFile(new File(Environment.getExternalStorageDirectory(),"filename.mp4")); 
    String dataPath = uri.getPath(); 
    String dataMsg = "Testing video sharing from my app"; 
    Bundle param; 

    facebook = new Facebook(FB_APP_ID); 
    AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(facebook); 
    InputStream is = null; 
    try { 
     is = new FileInputStream(dataPath); 
     data = readBytes(is); 
     param = new Bundle(); 
     param.putString("message", dataMsg); 
     param.putByteArray("video", data); 
     mAsyncRunner.request("me/videos", param, "POST", new SampleUploadListener(), null); 
    } 
    catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 
    catch (IOException e) { 
     e.printStackTrace(); 
    } 

读取字节的方法是

public byte[] readBytes(InputStream inputStream) throws IOException { 
    // this dynamically extends to take the bytes you read 
    ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream(); 

    // this is storage overwritten on each iteration with bytes 
    int bufferSize = 1024; 
    byte[] buffer = new byte[bufferSize]; 

    // we need to know how may bytes were read to write them to the byteBuffer 
    int len = 0; 
    while ((len = inputStream.read(buffer)) != -1) { 
     byteBuffer.write(buffer, 0, len); 
    } 

    // and then we can return your byte array. 
    return byteBuffer.toByteArray(); 
} 

的SampleUploader类是

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." 
      Example1.this.runOnUiThread(new Runnable() { 
       public void run() { 
        mText.setText("Hello there, video has been uploaded at \n" + src); 
       } 
      }); 
     } 
     catch (JSONException e) { 
      Log.w("Facebook-Example", "JSON Error in response"); 
     } 
     catch (FacebookError e) { 
      Log.w("Facebook-Example", "Facebook Error: " + e.getMessage()); 
     } 
    } 
} 

它不能正常工作,并且在的logcat它显示了下面的警告。

08-23 11:29:32.364: WARN/Bundle(860): Key message expected byte[] but value was a java.lang.String. The default value <null> was returned. 
08-23 11:29:32.374: WARN/Bundle(860): Attempt to cast generated internal exception: 
08-23 11:29:32.374: WARN/Bundle(860): java.lang.ClassCastException: java.lang.String 
08-23 11:29:32.374: WARN/Bundle(860):  at android.os.Bundle.getByteArray(Bundle.java:1305) 
08-23 11:29:32.374: WARN/Bundle(860):  at com.stellent.Tout.facebook.Util.openUrl(Util.java:161) 
08-23 11:29:32.374: WARN/Bundle(860):  at com.stellent.Tout.facebook.Facebook.request(Facebook.java:559) 
08-23 11:29:32.374: WARN/Bundle(860):  at com.stellent.Tout.facebook.AsyncFacebookRunner$2.run(AsyncFacebookRunner.java:253) 
08-23 11:29:32.386: WARN/Bundle(860): Key format expected byte[] but value was a java.lang.String. The default value <null> was returned. 
08-23 11:29:32.396: WARN/Bundle(860): Attempt to cast generated internal exception: 
08-23 11:29:32.396: WARN/Bundle(860): java.lang.ClassCastException: java.lang.String 
08-23 11:29:32.396: WARN/Bundle(860):  at android.os.Bundle.getByteArray(Bundle.java:1305) 
08-23 11:29:32.396: WARN/Bundle(860):  at com.stellent.Tout.facebook.Util.openUrl(Util.java:161) 
08-23 11:29:32.396: WARN/Bundle(860):  at com.stellent.Tout.facebook.Facebook.request(Facebook.java:559) 
08-23 11:29:32.396: WARN/Bundle(860):  at com.stellent.Tout.facebook.AsyncFacebookRunner$2.run(AsyncFacebookRunner.java:253) 
08-23 11:29:33.896: INFO/global(860): Default buffer size used in BufferedOutputStream constructor. It would be better to be explicit if an 8k buffer is required. 
08-23 11:29:33.905: WARN/Bundle(860): Key message expected byte[] but value was a java.lang.String. The default value <null> was returned. 
08-23 11:29:33.905: WARN/Bundle(860): Attempt to cast generated internal exception: 
08-23 11:29:33.905: WARN/Bundle(860): java.lang.ClassCastException: java.lang.String 
08-23 11:29:33.905: WARN/Bundle(860):  at android.os.Bundle.getByteArray(Bundle.java:1305) 
08-23 11:29:33.905: WARN/Bundle(860):  at com.stellent.Tout.facebook.Util.encodePostBody(Util.java:63) 
08-23 11:29:33.905: WARN/Bundle(860):  at com.stellent.Tout.facebook.Util.openUrl(Util.java:188) 
08-23 11:29:33.905: WARN/Bundle(860):  at com.stellent.Tout.facebook.Facebook.request(Facebook.java:559) 
08-23 11:29:33.905: WARN/Bundle(860):  at com.stellent.Tout.facebook.AsyncFacebookRunner$2.run(AsyncFacebookRunner.java:253) 
08-23 11:29:33.915: WARN/Bundle(860): Key method expected byte[] but value was a java.lang.String. The default value <null> was returned. 
08-23 11:29:33.915: WARN/Bundle(860): Attempt to cast generated internal exception: 
08-23 11:29:33.915: WARN/Bundle(860): java.lang.ClassCastException: java.lang.String 
08-23 11:29:33.915: WARN/Bundle(860):  at android.os.Bundle.getByteArray(Bundle.java:1305) 
08-23 11:29:33.915: WARN/Bundle(860):  at com.stellent.Tout.facebook.Util.encodePostBody(Util.java:63) 
08-23 11:29:33.915: WARN/Bundle(860):  at com.stellent.Tout.facebook.Util.openUrl(Util.java:188) 
08-23 11:29:33.915: WARN/Bundle(860):  at com.stellent.Tout.facebook.Facebook.request(Facebook.java:559) 
08-23 11:29:33.915: WARN/Bundle(860):  at com.stellent.Tout.facebook.AsyncFacebookRunner$2.run(AsyncFacebookRunner.java:253) 
08-23 11:29:33.935: WARN/Bundle(860): Key format expected byte[] but value was a java.lang.String. The default value <null> was returned. 
08-23 11:29:33.935: WARN/Bundle(860): Attempt to cast generated internal exception: 
08-23 11:29:33.935: WARN/Bundle(860): java.lang.ClassCastException: java.lang.String 
08-23 11:29:33.935: WARN/Bundle(860):  at android.os.Bundle.getByteArray(Bundle.java:1305) 
08-23 11:29:33.935: WARN/Bundle(860):  at com.stellent.Tout.facebook.Util.encodePostBody(Util.java:63) 
08-23 11:29:33.935: WARN/Bundle(860):  at com.stellent.Tout.facebook.Util.openUrl(Util.java:188) 
08-23 11:29:33.935: WARN/Bundle(860):  at com.stellent.Tout.facebook.Facebook.request(Facebook.java:559) 
08-23 11:29:33.935: WARN/Bundle(860):  at com.stellent.Tout.facebook.AsyncFacebookRunner$2.run(AsyncFacebookRunner.java:253) 

如何从我的应用程序共享Facebook上的视频?

+0

你可以安排它的一个工作示例。我为此感到非常遗憾。但没有成功上传视频....任何演示示例..预先感谢 –

回答

相关问题