我正在使用社交身份验证库与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
答案 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;
}