Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Facebook for Android FacebookDialog.ShareDialogBuilder不';无法识别请求返回的URI。newUploadStagingResourceWithImageRequest_Android_Facebook_Facebook Graph Api - Fatal编程技术网

Facebook for Android FacebookDialog.ShareDialogBuilder不';无法识别请求返回的URI。newUploadStagingResourceWithImageRequest

Facebook for Android FacebookDialog.ShareDialogBuilder不';无法识别请求返回的URI。newUploadStagingResourceWithImageRequest,android,facebook,facebook-graph-api,Android,Facebook,Facebook Graph Api,我对android和facebook比较陌生,所以请耐心听我说。重要提示:无论我在何处键入h。。也就是说。我不打算在这里张贴链接,但我必须解释这一点(我的许可只允许2个链接),所以请容忍我 此应用程序使用FacebookDialog.ShareDialogBuilder发布facebook帖子。如果为使用.setPicture方法的帖子提供静态硬编码URL h..example.com/share_name/image_name.png,那么这一切现在都非常有效。在这种情况下,帖子工作,图片显示

我对android和facebook比较陌生,所以请耐心听我说。重要提示:无论我在何处键入h。。也就是说。我不打算在这里张贴链接,但我必须解释这一点(我的许可只允许2个链接),所以请容忍我

此应用程序使用FacebookDialog.ShareDialogBuilder发布facebook帖子。如果为使用.setPicture方法的帖子提供静态硬编码URL h..example.com/share_name/image_name.png,那么这一切现在都非常有效。在这种情况下,帖子工作,图片显示在帖子上,一切都很好

但是,发送到帖子的图像是由应用程序动态创建的。因此,我将图像发送到facebook的暂存区,该区域也运行良好。 Request.newUploadStagingResourceWithImageRequest返回一个响应,该响应具有 这张照片出现在facebook的登台区

问题是FacebookDialog.ShareDialogBuilder不喜欢该URI位置。不知怎么的,它没有正确地形成或者我只是做错了什么

以下是详细信息和我尝试过的内容:

1) uriMine是存储图像的位置,它最初是从facebook的登台资源上传调用返回的,它是: "fbstaging://graph.facebook.com/staging_resources/MDE4NTY0NzE4MDQ0MTUwNjA6MTM5ODI2Nzc3Ng==". 我不知道协议“fbstaging:”是关于什么的(我在网上搜索了又搜索,但什么都没有),但我 一开始就按原样运行应用程序。结果显然是不可预测的结果,因为它卡在了一个循环中(looper类在没有特定模式的情况下不断重复)。它会显示post屏幕,但您无法键入消息,因为它会锁定、关闭、重复等

2) 在接受了一点关于格式良好的URL的在线教育后,我用h.替换了fbstaging://。。从而将uriMine变量更改为: h、 .graph.facebook.com/staging_resources/MDE4NTY0NzE4MDQ0MTUwNjA6MTM5ODI2Nzc3Ng== 这解决了无休止的循环问题(使后期工作很好),但它不会显示任何图像

3) 为了查看它是否能与任何形式为h..blabla.com/image_resource的旧的普通URL一起工作,我在线硬编码了一些图像的URL,它工作正常,并显示了这些图像

4) 好的,我保证,我已经完成了(唷!)。因此,目前的情况是:

a) 将尿嘧啶作为fbstaging://graph.facebook.com/staging_resources/etc 等 让它疯狂

b) 发送一个在线资源的普通URL很好(顺便说一句,它是由浏览器形成的)

c) 准备。而不是FBI,它让帖子工作,但facebook没有显示图像,好像它找不到它

顺便说一句,通过将其复制/粘贴到浏览器中直接转到上面的内容会被重定向到以下内容:

h、 .dnsrearch.com/index.php?origURL=http%3A//www.graph.facebook.com/staging_resources/mde40nze4mdq0mtuwnja6mtm5odi2nzc3ng%3D%3D&r=

显然它找不到它

因此:

这个URI有什么地方不对,或者我遗漏了什么?请帮忙

非常感谢您花时间和耐心阅读本文


暂存资源终结点仅用于暂存打开的图形对象或操作的二进制数据,并不用于常规链接共享。请参阅此处的文档:


在这种情况下,您可以使用(但不能添加链接),也可以将图像上载到自己的托管服务,并在setPicture方法中使用http/https url。

非常感谢!我已决定将图像上载到另一台主机。我在网上找到了一些代码,似乎它可以做到这一点,但它相当复杂。你能为我指出一些代码/类的正确方向吗?这些代码/类可以让这变得更轻松一些(例如,android的ftp逻辑已经有点抽象了,或者??),非常感谢你的时间。
public class FacebookActivity extends Activity {

// initialize the global object to enable passing of activity to facebook dialog
public GlobalClass globalObject = new GlobalClass();

private UiLifecycleHelper uiHelper; // for Facebook...to mimic android's activity life cycle

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    uiHelper = new UiLifecycleHelper(this, null);
    uiHelper.onCreate(savedInstanceState);

    // set the calling activity...to pass to Face book
    globalObject.setCurrentActivity(this);

    // start Facebook Login
    Session currentSession = new Session(this);
    currentSession = Session.openActiveSession(this, true, new Session.StatusCallback() {

        // callback when session changes state
        @Override
        public void call(final Session session, SessionState state, Exception exception) {

            // this callback should fire multiple times, be sure to get the right one i.e.  session.isOpened()
            if (session.isOpened()) {

                // make request to the /me API
                Request.newMeRequest(session, new Request.GraphUserCallback() {

                  // callback after Graph API response with user object
                  @Override
                  public void onCompleted(GraphUser user, Response response) {
                      if (user != null) {
                            Bitmap bitmap = takeScreenshot();
                            Request imageRequest = Request.newUploadStagingResourceWithImageRequest(Session.getActiveSession(), bitmap, new Request.Callback() {

                                @Override
                                public void onCompleted(Response response) {

                                    String uriMine = "";
                                    JSONObject data = response.getGraphObject().getInnerJSONObject();
                                    try {
                                        uriMine = data.getString("uri");
                                        uriMine = "http://www." + uriMine.substring(12); // strip off the "fbstaging://" from the uri
                                    } catch (JSONException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                    }

                                    if (FacebookDialog.canPresentShareDialog(getApplicationContext(), 
                                            FacebookDialog.ShareDialogFeature.SHARE_DIALOG))
                                        {
                                            FacebookDialog shareDialog = new FacebookDialog.ShareDialogBuilder(globalObject.getCurrentActivity())
                                            .setLink("https://play.google.com/store")
                                            .setPicture(uriMine) 
                                            .setRequestCode(NativeProtocol.DIALOG_REQUEST_CODE)
                                            .setApplicationName("This is the App Name")
                                            .setName("This is the name")
                                            .setDescription("This is the description")
                                            .setCaption("This is the caption")
                                            .build();
                                            uiHelper.trackPendingDialogCall(shareDialog.present());
                                        }
                                    else
                                    {
                                        Toast.makeText(globalObject.getCurrentActivity(), "Please install the Facebook App first from Google Play.", Toast.LENGTH_LONG).show();    
                                    }
                                }
                            });
                            imageRequest.executeAsync();
                      }
                  }
                }).executeAsync();
            }
        }
      });
}