通过我的Android应用程序在Facebook上共享视频

通过我的Android应用程序在Facebook上共享视频,android,facebook,video,Android,Facebook,Video,可能重复: 我想通过我的Android应用程序在Facebook上分享一段视频 我在我的应用程序上贴了一堵墙,效果很好。现在我想在Facebook上分享一段视频。所以我尝试了下面的代码 Facebook facebook; String FB_APP_ID=APP_ID; byte[] data = null; Uri uri=Uri.fromFile(new File(Environment.getExternalStorageDirectory(),"f

可能重复:

我想通过我的Android应用程序在Facebook上分享一段视频

我在我的应用程序上贴了一堵墙,效果很好。现在我想在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)
08-23 11:29:32.364:WARN/Bundle(860):关键消息应为字节[],但值为java.lang.String。返回了默认值。
08-23 11:29:32.374:警告/捆绑(860):尝试强制转换生成的内部异常:
08-23 11:29:32.374:WARN/Bundle(860):java.lang.ClassCastException:java.lang.String
08-23 11:29:32.374:WARN/Bundle(860):位于android.os.Bundle.getByteArray(Bundle.java:1305)
08-23 11:29:32.374:WARN/Bundle(860):位于com.stellent.Tout.facebook.Util.openUrl(Util.java:161)
08-23 11:29:32.374:WARN/Bundle(860):在com.stellent.Tout.facebook.facebook.request(facebook.java:559)
08-23 11:29:32.374:WARN/Bundle(860):位于com.stellent.Tout.facebook.AsyncFacebookRunner$2.run(AsyncFacebookRunner.java:253)
08-23 11:29:32.386:WARN/Bundle(860):密钥格式应为字节[],但值为java.lang.String。返回了默认值。
08-23 11:29:32.396:警告/捆绑(860):尝试强制转换生成的内部异常:
08-23 11:29:32.396:WARN/Bundle(860):java.lang.ClassCastException:java.lang.String
08-23 11:29:32.396:WARN/Bundle(860):位于android.os.Bundle.getByteArray(Bundle.java:1305)
08-23 11:29:32.396:WARN/Bundle(860):位于com.stellent.Tout.facebook.Util.openUrl(Util.java:161)
08-23 11:29:32.396:WARN/Bundle(860):在com.stellent.Tout.facebook.facebook.request(facebook.java:559)
08-23 11:29:32.396:WARN/Bundle(860):位于com.stellent.Tout.facebook.AsyncFacebookRunner$2.run(AsyncFacebookRunner.java:253)
08-23 11:29:33.896:INFO/global(860):BufferedOutputStream构造函数中使用的默认缓冲区大小。如果需要8k缓冲区,最好是显式的。
08-23 11:29:33.905:WARN/Bundle(860):关键消息应为字节[],但值为java.lang.String。返回了默认值。
08-23 11:29:33.905:警告/捆绑(860):尝试强制转换生成的内部异常:
08-23 11:29:33.905:WARN/Bundle(860):java.lang.ClassCastException:java.lang.String
08-23 11:29:33.905:WARN/Bundle(860):位于android.os.Bundle.getByteArray(Bundle.java:1305)
08-23 11:29:33.905:WARN/Bundle(860):位于com.stellent.Tout.facebook.Util.encodePostBody(Util.java:63)
08-23 11:29:33.905:WARN/Bundle(860):位于com.stellent.Tout.facebook.Util.openUrl(Util.java:188)
08-23 11:29:33.905:WARN/Bundle(860):在com.stellent.Tout.facebook.facebook.request(facebook.java:559)
08-23 11:29:33.905:WARN/Bundle(860):位于com.stellent.Tout.facebook.AsyncFacebookRunner$2.run(AsyncFacebookRunner.java:253)
08-23 11:29:33.915:WARN/Bundle(860):键方法应为字节[],但值为java.lang.String。返回了默认值。
08-23 11:29:33.915:警告/捆绑(860):尝试强制转换生成的内部异常:
08-23 11:29:33.915:WARN/Bundle(860):java.lang.ClassCastException:java.lang.String
08-23 11:29:33.915:WARN/Bundle(860):位于android.os.Bundle.getByteArray(Bundle.java:1305)
08-23 11:29:33.915:WARN/Bundle(860):位于com.stellent.Tout.facebook.Util.encodePostBody(Util.java:63)
08-23 11:29:33.915:WARN/Bundle(860):位于com.stellent.Tout.facebook.Util.openUrl(Util.java:188)
08-23 11:29:33.915:WARN/Bundle(860):在com.stellent.Tout.facebook.facebook.request(facebook.java:559)
08-23 11:29:33.915:WARN/Bundle(860):位于com.stellent.Tout.facebook.AsyncFacebookRunner$2.run(AsyncFacebookRunner.java:253)
08-23 11:29:33.935:WARN/Bundle(860):密钥格式应为字节[],但值为java.lang.String。返回了默认值。
08-23 11:29:33.935:警告/捆绑(860):尝试强制转换生成的内部异常:
08-23 11:29:33.935:WARN/Bundle(860):java.lang.ClassCastException:java.lang.String
08-23 11:29:33.935:WARN/Bundle(860):位于android.os.Bundle.getByteArray(Bundle.java:1305)
08-23 11:29:33.935:WARN/Bundle(860):位于com.stellent.Tout.facebook.Util.encodePostBody(Util.java:63)
08-23 11:29:33.935:WARN/Bundle(860):位于com.stellent.Tout.facebook.Util.openUrl(Util.java:188)
08-23 11:29:33.935:WARN/Bundle(860):在com.stellent.Tout.facebook.facebook.request(facebook.java:559)
08-23 11:29:33.935:WARN/Bundle(860):位于com.stellent.Tout.facebook.AsyncFacebookRunner$2.run(AsyncFacebookRunner.java:253)

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

我在StackOverflow中研究发现。

你能安排一个工作示例吗。我为它冲浪太多了。但无法成功上传视频…任何演示示例..提前感谢我尝试了您的代码,它返回-oauthexception code 2500,oauthexception:必须使用活动访问令牌。请ypu帮助我如何修复此错误。