在Android SDK的Facebook 3.5股对话框不工作 [英] facebook sdk 3.5 share dialog on android not working

查看:256
本文介绍了在Android SDK的Facebook 3.5股对话框不工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直徘徊在谷歌和这个网站现在两个星期才能找到我的问题的一些答案,但我没有得到任何。我已经做了的应用程序中,用户可以拍照,并hopefuly,它们更新到Facebook。现在,我已经设法做一个画廊,当图像的用户preSS,它是在一个新的类,叫做ViewImage开放。在那里,我屁股的一些选项的菜单,如设置和共享。现在,我想,当用户preSS份额,有事会后对他的Facebook个人资料,使用共享对话框(以后我会尽力的Open Graph)。
这里是code代表ViewImage,还有一部分是从 https://gist.github.com采取/ jacklt / 6700201

 公共类ViewImage延伸活动{
    TextView的文本;
    ImageView的ImageView的;
    私人诠释的位置;
    私有String []文件名;
    私有String []文件路径;
    私人UiLifecycleHelper uiHelper;
    私有静态最后弦乐TAG_LOG = ViewImage.class.getSimpleName();
    私人FacebookDialog.Callback dialogCallback =新FacebookDialog.Callback(){
        @覆盖
        公共无效onerror的(FacebookDialog.PendingCall pendingCall,异常错误,捆绑数据){
            Log.d(TAG_LOG,的String.format(错误:%s,error.toString()));
        }        @覆盖
        公共无效的onComplete(FacebookDialog.PendingCall pendingCall,捆绑数据){
            Log.d(TAG_LOG,成功!);
        }
    };    私人Session.StatusCallback回调=新Session.StatusCallback(){
        @覆盖
        公共无效呼叫(会话的会话,SessionState会状态,异常除外){
            onSessionStateChange(会话,状态除外);
        }
    };    私人无效onSessionStateChange(会话的会话,SessionState会状态,异常除外){
        如果(state.isOpened()){
            Log.i(TAG_LOG,在...记录);
        }否则如果(state.isClosed()){
            Log.i(TAG_LOG注销...);
        }
    }    @覆盖
    公共无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);        uiHelper =新UiLifecycleHelper(这一点,回调);
        uiHelper.onCreate(savedInstanceState);        //从view_image.xml视图
        的setContentView(R.layout.view_image); ;        //从MainActivity检索上的GridView项目点击数据
        意向I = getIntent();        //获取位置
        位置= i.getExtras()调用getInt(位置);        //获取字符串数组File​​PathStrings
        文件路径= i.getStringArrayExtra(文件路径);        //获取字符串数组File​​NameStrings
        文件名= i.getStringArrayExtra(文件名);        //定位view_image.xml TextView的
        文字=(TextView的)findViewById(R.id.imagetext);        //将文成TextView的后跟位置
        text.setText(文件名[位置]);        //定位view_image.xml的ImageView的
        ImageView的=(ImageView的)findViewById(R.id.full_image_view);        imageview.setScaleType(ImageView.ScaleType.CENTER_CROP);        //德code。与BitmapFactory文件路径后面的位置
        BMP位图= BitmapFactory.de codeFILE(文件路径[位置]);        BMP = GridViewAdapter.adjustImageOrientation(BMP,文件路径[位置]);        //设置德codeD位图到的ImageView
        imageview.setImageBitmap(BMP);    }    @覆盖
    公共无效的onActivityResult(INT申请code,INT结果code,意图数据){
        super.onActivityResult(要求code,结果code,数据);
        uiHelper.onActivityResult(要求code,结果code,数据,dialogCallback);
    }    @覆盖
    公共无效onResume(){
        super.onResume();
        uiHelper.onResume();
    }    @覆盖
    公共无效的onSaveInstanceState(捆绑outState){
        super.onSaveInstanceState(outState);
        uiHelper.onSaveInstanceState(outState);
    }    @覆盖
    公共无效的onPause(){
        super.onPause();
        uiHelper.onPause();
    }    @覆盖
    公共无效的onDestroy(){
        super.onDestroy();
        uiHelper.onDestroy();
    }    @覆盖
    公共布尔onCreateOptionsMenu(菜单菜单){
        //充气菜单;如果是present这增加了项目操作栏。
        。getMenuInflater()膨胀(R.menu.view_image,菜单);
        返回true;
    }
    @覆盖
    公共布尔onOptionsItemSelected(菜单项项){
        如果(item.getItemId()== R.id.action_home){
            {
                意图I =新意图();
                i.setClass(这一点,Main.class);
                startActivity(ⅰ);
            }
            返回true;
        }否则如果(item.getItemId()== R.id.action_settings){
            {
                意图I =新意图(net.lirazarviv.Setting);
                startActivity(ⅰ);
            }
            返回true;
        }否则如果(item.getItemId()== R.id.action_share){
            {
                如果(FacebookDialog.can presentShareDialog(这一点,FacebookDialog.ShareDialogFeature.SHARE_DIALOG)){
                    FacebookDialog shareDialog =新FacebookDialog.ShareDialogBu​​ilder(本)
                            .setName(TITOLO)
                            .setLink(http://developer.neosperience.com/android)
                            .setDescription(你好,从Neosperience开发者)
                            .setPicture(\"http://lh3.googleusercontent.com/-P4JBVTv_kSI/AAAAAAAAAAI/AAAAAAAAAAs/bZptjIhkWu4/s265-c-k-no/photo.jpg\")
                            。建立();
                    uiHelper.trackPendingDialogCall(shareDialog present());                }
                其他{
                    Log.d(TAG_LOG,成功!);
                }
            }             返回true;
        }否则返回super.onOptionsItemSelected(项目);
    }
}

当我preSS的分享按钮,该应用程序崩溃只是...一些帮助,这将是AP preciate!
附:这里是logcat的:

  E / PlayerDriver(83):PlayerDriver :: handleTvOut状态= [1]
10-03 15:21:45.893 E / PlayerDriver(83):PlayerDriver ::它不是一个DRM file.So不挂起TVOUT
10-03 15:21:53.440 E / AndroidRuntime(1467):致命异常:主要
10-03 15:21:53.440 E / AndroidRuntime(1467):了java.lang.RuntimeException:无法启动活动ComponentInfo {net.lirazarviv.origame / net.lirazarviv.origame.ViewImage}:显示java.lang.NullPointerException:参数的applicationID不能为空
10-03 15:21:53.440 E / AndroidRuntime(1467):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
10-03 15:21:53.440 E / AndroidRuntime(1467):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
10-03 15:21:53.440 E / AndroidRuntime(1467):在android.app.ActivityThread.access $ 1500(ActivityThread.java:117)
10-03 15:21:53.440 E / AndroidRuntime(1467):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:935)
10-03 15:21:53.440 E / AndroidRuntime(1467):在android.os.Handler.dispatchMessage(Handler.java:99)
10-03 15:21:53.440 E / AndroidRuntime(1467):在android.os.Looper.loop(Looper.java:123)
10-03 15:21:53.440 E / AndroidRuntime(1467):在android.app.ActivityThread.main(ActivityThread.java:3687)
10-03 15:21:53.440 E / AndroidRuntime(1467):在java.lang.reflect.Method.invokeNative(本机方法)
10-03 15:21:53.440 E / AndroidRuntime(1467):在java.lang.reflect.Method.invoke(Method.java:507)
10-03 15:21:53.440 E / AndroidRuntime(1467):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:842)
10-03 15:21:53.440 E / AndroidRuntime(1467):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
10-03 15:21:53.440 E / AndroidRuntime(1467):在dalvik.system.NativeStart.main(本机方法)
10-03 15:21:53.440 E / AndroidRuntime(1467):显示java.lang.NullPointerException:由引起争论的applicationID不能为空
10-03 15:21:53.440 E / AndroidRuntime(1467):在com.facebook.internal.Validate.notNull(Validate.java:29)
10-03 15:21:53.440 E / AndroidRuntime(1467):在com.facebook.Session<&初始化GT;(Session.java:227)
10-03 15:21:53.440 E / AndroidRuntime(1467):在com.facebook.Session<&初始化GT;(Session.java:212)
10-03 15:21:53.440 E / AndroidRuntime(1467):在com.facebook.UiLifecycleHelper.onCreate(UiLifecycleHelper.java:87)
10-03 15:21:53.440 E / AndroidRuntime(1467):在net.lirazarviv.origame.ViewImage.onCreate(ViewImage.java:58)
10-03 15:21:53.440 E / AndroidRuntime(1467):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
10-03 15:21:53.440 E / AndroidRuntime(1467):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
10-03 15:21:53.440 E / AndroidRuntime(1467):11 ...更多
10-03 15:21:53.748 E /(128):Dumpstate> /数据/日志/ dumpstate_app_error


解决方案

那是因为你没有在你的清单应用程序ID集。通常情况下,如果你已经在使用其它SDK功能(如登录),那么你就必须在你的清单了,但如果你不是,这里是如何添加:

在你的Andr​​oidManifest.xml中应用的标签,添加类似:

 <应用>
  ...
  &所述;元数据
        机器人:名字=com.facebook.sdk.ApplicationId
        机器人:值=@字符串/ APP_ID/>
< /用途>

然后,在你的价值观/ strings.xml中添加

 <字符串名称=APP_ID> YOUR_FACEBOOK_APP_ID< /串>

I've been wandering in google and this site for two weeks now in order to find some answers for my problem, but i didnt get any. i've done a app in which the users can take pictures and, hopefuly, update them to facebook. now, i've manage to do a gallery and when the user press on image, it's open in a new class, called ViewImage. there i ass some option menu, such as settings and share. for now, i want that when the user press share, something will be post to his facebook profile, using share dialog (later i'll try open graph). here is the code for ViewImage, some of it is taken from https://gist.github.com/jacklt/6700201:

public class ViewImage extends Activity {
    TextView text;
    ImageView imageview;
    private int position;
    private String[] filename;
    private String[] filepath;
    private UiLifecycleHelper uiHelper;
    private static final String TAG_LOG = ViewImage.class.getSimpleName();
    private FacebookDialog.Callback dialogCallback = new FacebookDialog.Callback() {
        @Override
        public void onError(FacebookDialog.PendingCall pendingCall, Exception error, Bundle data) {
            Log.d(TAG_LOG, String.format("Error: %s", error.toString()));
        }

        @Override
        public void onComplete(FacebookDialog.PendingCall pendingCall, Bundle data) {
            Log.d(TAG_LOG, "Success!");
        }
    };

    private Session.StatusCallback callback = new Session.StatusCallback() {
        @Override
        public void call(Session session, SessionState state, Exception exception) {
            onSessionStateChange(session, state, exception);
        }
    };

    private void onSessionStateChange(Session session, SessionState state, Exception exception) {
        if (state.isOpened()) {
            Log.i(TAG_LOG, "Logged in...");
        } else if (state.isClosed()) {
            Log.i(TAG_LOG, "Logged out...");
        }
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

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

        // Get the view from view_image.xml
        setContentView(R.layout.view_image); ;

        // Retrieve data from MainActivity on GridView item click
        Intent i = getIntent();

        // Get the position
        position = i.getExtras().getInt("position");

        // Get String arrays FilePathStrings
        filepath = i.getStringArrayExtra("filepath");

        // Get String arrays FileNameStrings
        filename = i.getStringArrayExtra("filename");

        // Locate the TextView in view_image.xml
        text = (TextView) findViewById(R.id.imagetext);

        // Load the text into the TextView followed by the position
        text.setText(filename[position]);

        // Locate the ImageView in view_image.xml
        imageview = (ImageView) findViewById(R.id.full_image_view);

        imageview.setScaleType(ImageView.ScaleType.CENTER_CROP);

        // Decode the filepath with BitmapFactory followed by the position
        Bitmap bmp = BitmapFactory.decodeFile(filepath[position]);

        bmp = GridViewAdapter.adjustImageOrientation(bmp,filepath[position]);

        // Set the decoded bitmap into ImageView
        imageview.setImageBitmap(bmp);

    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        uiHelper.onActivityResult(requestCode, resultCode, data, dialogCallback);
    }

    @Override
    public void onResume() {
        super.onResume();
        uiHelper.onResume();
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        uiHelper.onSaveInstanceState(outState);
    }

    @Override
    public void onPause() {
        super.onPause();
        uiHelper.onPause();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        uiHelper.onDestroy();
    }



    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.view_image, menu);
        return true;
    }


    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == R.id.action_home) {
            {
                Intent i = new Intent();
                i.setClass(this, Main.class);
                startActivity(i);
            }
            return true;
        } else if (item.getItemId() == R.id.action_settings) {
            {
                Intent i = new Intent("net.lirazarviv.Setting");
                startActivity(i);
            }
            return true;
        } else if (item.getItemId() == R.id.action_share) {
            {
                if (FacebookDialog.canPresentShareDialog(this, FacebookDialog.ShareDialogFeature.SHARE_DIALOG)) {
                    FacebookDialog shareDialog = new FacebookDialog.ShareDialogBuilder(this)
                            .setName("Titolo")
                            .setLink("http://developer.neosperience.com/android")
                            .setDescription("Hello from Neosperience Developer")
                            .setPicture("http://lh3.googleusercontent.com/-P4JBVTv_kSI/AAAAAAAAAAI/AAAAAAAAAAs/bZptjIhkWu4/s265-c-k-no/photo.jpg")
                            .build();
                    uiHelper.trackPendingDialogCall(shareDialog.present());

                }
                else {
                    Log.d(TAG_LOG, "Success!");
                }
            }

             return true;
        }  else return super.onOptionsItemSelected(item);
    }
}

when i press the share button, the app just crash.. some help with this will be appreciate! p.s. here is the logcat:

E/PlayerDriver(   83): PlayerDriver::handleTvOut state=[1]
10-03 15:21:45.893 E/PlayerDriver(   83): PlayerDriver::it is not a DRM file.So don't suspend TVOUT
10-03 15:21:53.440 E/AndroidRuntime( 1467): FATAL EXCEPTION: main
10-03 15:21:53.440 E/AndroidRuntime( 1467): java.lang.RuntimeException: Unable to start activity ComponentInfo{net.lirazarviv.origame/net.lirazarviv.origame.ViewImage}: java.lang.NullPointerException: Argument 'applicationId' cannot be null
10-03 15:21:53.440 E/AndroidRuntime( 1467):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
10-03 15:21:53.440 E/AndroidRuntime( 1467):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
10-03 15:21:53.440 E/AndroidRuntime( 1467):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
10-03 15:21:53.440 E/AndroidRuntime( 1467):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
10-03 15:21:53.440 E/AndroidRuntime( 1467):     at android.os.Handler.dispatchMessage(Handler.java:99)
10-03 15:21:53.440 E/AndroidRuntime( 1467):     at android.os.Looper.loop(Looper.java:123)
10-03 15:21:53.440 E/AndroidRuntime( 1467):     at android.app.ActivityThread.main(ActivityThread.java:3687)
10-03 15:21:53.440 E/AndroidRuntime( 1467):     at java.lang.reflect.Method.invokeNative(Native Method)
10-03 15:21:53.440 E/AndroidRuntime( 1467):     at java.lang.reflect.Method.invoke(Method.java:507)
10-03 15:21:53.440 E/AndroidRuntime( 1467):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
10-03 15:21:53.440 E/AndroidRuntime( 1467):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
10-03 15:21:53.440 E/AndroidRuntime( 1467):     at dalvik.system.NativeStart.main(Native Method)
10-03 15:21:53.440 E/AndroidRuntime( 1467): Caused by: java.lang.NullPointerException: Argument 'applicationId' cannot be null
10-03 15:21:53.440 E/AndroidRuntime( 1467):     at com.facebook.internal.Validate.notNull(Validate.java:29)
10-03 15:21:53.440 E/AndroidRuntime( 1467):     at com.facebook.Session.<init>(Session.java:227)
10-03 15:21:53.440 E/AndroidRuntime( 1467):     at com.facebook.Session.<init>(Session.java:212)
10-03 15:21:53.440 E/AndroidRuntime( 1467):     at com.facebook.UiLifecycleHelper.onCreate(UiLifecycleHelper.java:87)
10-03 15:21:53.440 E/AndroidRuntime( 1467):     at net.lirazarviv.origame.ViewImage.onCreate(ViewImage.java:58)
10-03 15:21:53.440 E/AndroidRuntime( 1467):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
10-03 15:21:53.440 E/AndroidRuntime( 1467):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
10-03 15:21:53.440 E/AndroidRuntime( 1467):     ... 11 more
10-03 15:21:53.748 E/        (  128): Dumpstate > /data/log/dumpstate_app_error

解决方案

It's because you don't have the application id set in your manifest. Normally, if you're already using other SDK features (like Login), then you would have it in your manifest already, but if you're not, here's how to add it:

Within the application tag in your AndroidManifest.xml, add something like:

<application>
  ...
  <meta-data
        android:name="com.facebook.sdk.ApplicationId"
        android:value="@string/app_id" />
</application>

Then, in your values/strings.xml, add

<string name="app_id">YOUR_FACEBOOK_APP_ID</string>

这篇关于在Android SDK的Facebook 3.5股对话框不工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆