来自facebook的注销时,在android nullpointerexception中的社交认证

时间:2014-05-09 10:31:39

标签: android nullpointerexception social-networking socialauth

我正在使用社交身份验证库与Android应用中的社交媒体共享和登录。

我已登录并使用facebook成功授权。 但是当我尝试注销使用nullpointer异常的应用程序

adapter.signOut(getActivity(), Provider.FACEBOOK.toString());

获得以下错误:

05-09 10:24:23.010: E/AndroidRuntime(19998): java.lang.NullPointerException
05-09 10:24:23.010: E/AndroidRuntime(19998): at org.brickred.socialauth.android.SocialAuthAdapter.signOut(SocialAuthAdapter.java:797)

我正在使用最新版本。 socialauth-4.4.jar和socialauth-android-3.2.jar

4 个答案:

答案 0 :(得分:0)

请务必致电活动。从这样的活动调用方法后片段中的Getactivity()不起作用将适用于adapter.signOut(this,Provider.FACEBOOK);

答案 1 :(得分:0)

我有类似的问题,这个解决方案对我有用: https://code.google.com/p/socialauth-android/issues/detail?id=108#c16

基本上在注销功能中存在错误,您必须在注销前登录,否则您可能会获得NPE。上面的解决方案是在必要时创建一个新的SocialAuthManager。

我建议将该源代码导入为java模块,而不是使用jar文件,这样您就可以自己修改一些内容,比如更改对话框标题文本等等。

答案 2 :(得分:0)

In signOut function put these lines,

if (providerName != null) {
            if (socialAuthManager == null) {
                socialAuthManager = new SocialAuthManager();
                try {
                    loadConfig(ctx);
                } catch (Exception e) {
                    Log.d(" SocialAuthAdapter ", "Could not load configuration");
                }
            }

before 

if (socialAuthManager.getConnectedProvidersIds().contains(providerName)) socialAuthManager.disconnectProvider(providerName);

答案 3 :(得分:0)

对于我来说,这已经解决了这个问题,如果应用程序范围的适配器为空,那么在你要注销的类中实例化一个新的适配器

//My Activity
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_profile);

    //Get the currently available adapter
    myApp = (MyApplication) getApplication();
    adapter = myApp.getSocialAuthAdapter();

    //Adapter initialization if null
    if (adapter==null){
        adapter = new SocialAuthAdapter(new ResponseListener());
    }
}

//ResponseListener Class
    public final class ResponseListener implements DialogListener {

    @Override
    public void onComplete(Bundle values) {

        String providerName = values.getString(SocialAuthAdapter.PROVIDER);

        // Set a application wide reference to the social adapter here
        myApp = (MyApplication) getApplication();
        myApp.setSocialAuthAdapter(adapter);                         
    }

    @Override
    public void onError(SocialAuthError error) {
        Log.d("Custom-UI", "Error");
        error.printStackTrace();
    }

    @Override
    public void onCancel() {
        Log.d("Custom-UI", "Cancelled");
    }

    @Override
    public void onBack() {
        Log.d("Custom-UI", "Dialog Closed by pressing Back Key");

    }
}


//Code for application class

public class MyApplication extends Application {

// SocialAuth Component
private SocialAuthAdapter socialAuthAdpater;

public SocialAuthAdapter getSocialAuthAdapter() {
        return socialAuthAdpater;
}

public void setSocialAuthAdapter(SocialAuthAdapter socialAuthAdapter) {
        this.socialAuthAdpater = socialAuthAdapter;
}