Android 获取facebook会话时出错
正在尝试访问其他屏幕中的Android 获取facebook会话时出错,android,facebook,session,Android,Facebook,Session,正在尝试访问其他屏幕中的Facebook会话 因此尝试了Session.getActiveSession,但返回null,因此尝试使用缓存,如下所示 if (session == null) { // try to restore from cache session = Session .openActiveSessionFromCache(getApplicationContext()); } if (session != null &&
Facebook
会话
因此尝试了Session.getActiveSession
,但返回null,因此尝试使用缓存,如下所示
if (session == null) {
// try to restore from cache
session = Session
.openActiveSessionFromCache(getApplicationContext());
}
if (session != null && session.isOpened()) {
// Start a background task which handles ntwork calls
new FetchTask().execute();
}
但同时也出现以下错误,建议我合适的解决方案,谢谢
这是堆栈跟踪
01-21 20:28:03.431: E/AndroidRuntime(28191): FATAL EXCEPTION: main
01-21 20:28:03.431: E/AndroidRuntime(28191): java.lang.NullPointerException: Argument '148885915321893' cannot be null
01-21 20:28:03.431: E/AndroidRuntime(28191): at com.facebook.internal.Validate.notNull(Validate.java:29)
01-21 20:28:03.431: E/AndroidRuntime(28191): at com.facebook.Session.<init>(Session.java:227)
01-21 20:28:03.431: E/AndroidRuntime(28191): at com.facebook.Session.<init>(Session.java:216)
01-21 20:28:03.431: E/AndroidRuntime(28191): at com.facebook.Session$Builder.build(Session.java:1576)
01-21 20:28:03.431: E/AndroidRuntime(28191): at com.facebook.Session.openActiveSession(Session.java:888)
01-21 20:28:03.431: E/AndroidRuntime(28191): at com.facebook.Session.openActiveSessionFromCache(Session.java:808)
01-21 20:28:03.431: E/AndroidRuntime(28191): at com.srikanth.ema.Transaction$HttpAsyncTask.onPostExecute(Transaction.java:172)
01-21 20:28:03.431: E/AndroidRuntime(28191): at com.srikanth.ema.Transaction$HttpAsyncTask.onPostExecute(Transaction.java:1)
01-21 20:28:03.431: E/AndroidRuntime(28191): at android.os.AsyncTask.finish(AsyncTask.java:631)
01-21 20:28:03.431: E/AndroidRuntime(28191): at android.os.AsyncTask.access$600(AsyncTask.java:177)
01-21 20:28:03.431: E/AndroidRuntime(28191): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
01-21 20:28:03.431: E/AndroidRuntime(28191): at android.os.Handler.dispatchMessage(Handler.java:99)
01-21 20:28:03.431: E/AndroidRuntime(28191): at android.os.Looper.loop(Looper.java:137)
01-21 20:28:03.431: E/AndroidRuntime(28191): at android.app.ActivityThread.main(ActivityThread.java:4960)
01-21 20:28:03.431: E/AndroidRuntime(28191): at java.lang.reflect.Method.invokeNative(Native Method)
01-21 20:28:03.431: E/AndroidRuntime(28191): at java.lang.reflect.Method.invoke(Method.java:511)
01-21 20:28:03.431: E/AndroidRuntime(28191): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
01-21 20:28:03.431: E/AndroidRuntime(28191): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
01-21 20:28:03.431: E/AndroidRuntime(28191): at dalvik.system.NativeStart.main(Native Method)
01-21 20:28:03.431:E/AndroidRuntime(28191):致命异常:main
01-21 20:28:03.431:E/AndroidRuntime(28191):java.lang.NullPointerException:参数“148885915321893”不能为null
01-21 20:28:03.431:E/AndroidRuntime(28191):在com.facebook.internal.Validate.notNull(Validate.java:29)
01-21 20:28:03.431:E/AndroidRuntime(28191):在com.facebook.Session上。(Session.java:227)
01-21 20:28:03.431:E/AndroidRuntime(28191):在com.facebook.Session.(Session.java:216)
01-21 20:28:03.431:E/AndroidRuntime(28191):在com.facebook.Session$Builder.build(Session.java:1576)上
01-21 20:28:03.431:E/AndroidRuntime(28191):在com.facebook.Session.openActiveSession(Session.java:888)上
01-21 20:28:03.431:E/AndroidRuntime(28191):在com.facebook.Session.openActiveSessionFromCache(Session.java:808)上
01-21 20:28:03.431:E/AndroidRuntime(28191):位于com.srikanth.ema.Transaction$HttpAsyncTask.onPostExecute(Transaction.java:172)
01-21 20:28:03.431:E/AndroidRuntime(28191):位于com.srikanth.ema.Transaction$HttpAsyncTask.onPostExecute(Transaction.java:1)
01-21 20:28:03.431:E/AndroidRuntime(28191):在android.os.AsyncTask.finish(AsyncTask.java:631)
01-21 20:28:03.431:E/AndroidRuntime(28191):在android.os.AsyncTask.access$600(AsyncTask.java:177)
01-21 20:28:03.431:E/AndroidRuntime(28191):位于android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
01-21 20:28:03.431:E/AndroidRuntime(28191):在android.os.Handler.dispatchMessage(Handler.java:99)上
01-21 20:28:03.431:E/AndroidRuntime(28191):在android.os.Looper.loop(Looper.java:137)
01-21 20:28:03.431:E/AndroidRuntime(28191):位于android.app.ActivityThread.main(ActivityThread.java:4960)
01-21 20:28:03.431:E/AndroidRuntime(28191):位于java.lang.reflect.Method.Invokenactive(本机方法)
01-21 20:28:03.431:E/AndroidRuntime(28191):在java.lang.reflect.Method.invoke(Method.java:511)
01-21 20:28:03.431:E/AndroidRuntime(28191):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
01-21 20:28:03.431:E/AndroidRuntime(28191):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
01-21 20:28:03.431:E/AndroidRuntime(28191):在dalvik.system.NativeStart.main(本机方法)
您可以创建这样的方法
private Session createSession() {
Session activeSession = Session.getActiveSession();
if (activeSession == null || activeSession.getState().isClosed()) {
activeSession = new Session.Builder(mainActivity).setApplicationId(appId).build();
Session.setActiveSession(activeSession);
}
return activeSession;
}
然后在构造函数中:
this.session = createSession();
然后去读东西
public void obtainFBInfo(){
if (this.session.isOpened()) {
getID();
} else {
StatusCallback callback = new StatusCallback() {
public void call(Session session, SessionState state, Exception exception) {
if (exception != null) {
ConnectToFacebook.this.session = createSession();
}
else if(state == SessionState.OPENED || state == SessionState.OPENED_TOKEN_UPDATED)
getID();
}
};
this.session.openForRead(new Session.OpenRequest(mainActivity).setCallback(callback));
}
}
确保在您的活动中有以下内容:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(Session.getActiveSession() != null){
Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
}
}
下面是全班同学:
import android.app.Activity;
import android.os.Bundle;
import com.facebook.FacebookRequestError;
import com.facebook.LoggingBehavior;
import com.facebook.Request;
import com.facebook.Response;
import com.facebook.Session;
import com.facebook.Session.StatusCallback;
import com.facebook.SessionState;
import com.facebook.Settings;
import com.facebook.model.GraphObject;
public class ConnectToFacebook {
static final String appId = "your app ID";
private Session session;
private Activity mainActivity;
/**
*
*/
public ConnectToFacebook(Activity mainActivity) {
this.mainActivity = mainActivity;
this.session = createSession();
Settings.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS);
}
public void obtainFBInfo(){
if (this.session.isOpened()) {
getID();
} else {
StatusCallback callback = new StatusCallback() {
public void call(Session session, SessionState state, Exception exception) {
if (exception != null) {
ConnectToFacebook.this.session = createSession();
}
else if(state == SessionState.OPENED || state == SessionState.OPENED_TOKEN_UPDATED)
getID();
}
};
this.session.openForRead(new Session.OpenRequest(mainActivity).setCallback(callback));
}
}
private void getID() {
new Thread(new Runnable() {
@Override
public void run() {
String requestIdsText = "me";
Bundle params = new Bundle();
params.putString("fields", "id,name,installed");
new Request(session, requestIdsText, params, null, new Request.Callback() {
public void onCompleted(Response response) {
GraphObject graphObject = response.getGraphObject();
FacebookRequestError error = response.getError();
if (graphObject != null) {
if (graphObject.getProperty("id") != null)
//setFbId(String.format("%s", graphObject.getProperty("id")));
if (graphObject.getProperty("name") != null)
//setFbName(String.format("%s", graphObject.getProperty("name")));
if(mainActivity instanceof ScreenOptions)
((ScreenOptions) mainActivity).runOnUiThread(new Runnable() {
@Override
public void run() {
((ScreenOptions) mainActivity).updateConnectionStatus();
}
});
} else if (error != null) {
System.err.println(String.format("Error: %s", error.getErrorMessage()));
}
}
}).executeAndWait();
}
}).start();
}
private Session createSession() {
Session activeSession = Session.getActiveSession();
if (activeSession == null || activeSession.getState().isClosed()) {
activeSession = new Session.Builder(mainActivity).setApplicationId(appId).build();
Session.setActiveSession(activeSession);
}
return activeSession;
}
}
用这个它对我有用
if (fb_session != null && fb_session.isOpened()) {
makeMeRequest(fb_session); // if facebook session open get user information
Log.i("Facebook Login State == >", "Facebook Login State");
} else {
if (fb_session == null) {
fb_session = new Session(mCurrContext);
}
Session.setActiveSession(fb_session);
ConnectToFacebook(); // other wise connected to facebook
Log.i("Facebook not Login State == >", "Facebook Not login State");
}
}
破例
01-22 04:15:34.934: E/AndroidRuntime(24283): FATAL EXCEPTION: main
01-22 04:15:34.934: E/AndroidRuntime(24283): java.lang.NullPointerException: Argument '148885915321893' cannot be null
01-22 04:15:34.934: E/AndroidRuntime(24283): at com.facebook.internal.Validate.notNull(Validate.java:29)
01-22 04:15:34.934: E/AndroidRuntime(24283): at com.facebook.Session.<init>(Session.java:227)
01-22 04:15:34.934: E/AndroidRuntime(24283): at com.facebook.Session.<init>(Session.java:212)
01-22 04:15:34.934: E/AndroidRuntime(24283): at com.srikanth.ema.Transaction$HttpAsyncTask.onPostExecute(Transaction.java:182)
01-22 04:15:34.934: E/AndroidRuntime(24283): at com.srikanth.ema.Transaction$HttpAsyncTask.onPostExecute(Transaction.java:1)
01-22 04:15:34.934: E/AndroidRuntime(24283): at android.os.AsyncTask.finish(AsyncTask.java:631)
01-22 04:15:34.934: E/AndroidRuntime(24283): at android.os.AsyncTask.access$600(AsyncTask.java:177)
01-22 04:15:34.934: E/AndroidRuntime(24283): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
01-22 04:15:34.934: E/AndroidRuntime(24283): at android.os.Handler.dispatchMessage(Handler.java:99)
01-22 04:15:34.934: E/AndroidRuntime(24283): at android.os.Looper.loop(Looper.java:137)
01-22 04:15:34.934: E/AndroidRuntime(24283): at android.app.ActivityThread.main(ActivityThread.java:4960)
01-22 04:15:34.934: E/AndroidRuntime(24283): at java.lang.reflect.Method.invokeNative(Native Method)
01-22 04:15:34.934: E/AndroidRuntime(24283): at java.lang.reflect.Method.invoke(Method.java:511)
01-22 04:15:34.934: E/AndroidRuntime(24283): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
01-22 04:15:34.934: E/AndroidRuntime(24283): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
01-22 04:15:34.934: E/AndroidRuntime(24283): at dalvik.system.NativeStart.main(Native Method)
01-22 04:15:34.934:E/AndroidRuntime(24283):致命异常:主
01-22 04:15:34.934:E/AndroidRuntime(24283):java.lang.NullPointerException:参数“148885915321893”不能为null
01-22 04:15:34.934:E/AndroidRuntime(24283):在com.facebook.internal.Validate.notNull(Validate.java:29)
01-22 04:15:34.934:E/AndroidRuntime(24283):在com.facebook.Session.(Session.java:227)
01-22 04:15:34.934:E/AndroidRuntime(24283):在com.facebook.Session.(Session.java:212)
01-22 04:15:34.934:E/AndroidRuntime(24283):位于com.srikanth.ema.Transaction$HttpAsyncTask.onPostExecute(Transaction.java:182)
01-22 04:15:34.934:E/AndroidRuntime(24283):位于com.srikanth.ema.Transaction$HttpAsyncTask.onPostExecute(Transaction.java:1)
01-22 04:15:34.934:E/AndroidRuntime(24283):在android.os.AsyncTask.finish(AsyncTask.java:631)
01-22 04:15:34.934:E/AndroidRuntime(24283):在android.os.AsyncTask.access$600(AsyncTask.java:177)
01-22 04:15:34.934:E/AndroidRuntime(24283):位于android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
01-22 04:15:34.934:E/AndroidRuntime(24283):位于android.os.Handler.dispatchMessage(Handler.java:99)
01-22 04:15:34.934:E/AndroidRuntime(24283):在android.os.Looper.loop(Looper.java:137)
01-22 04:15:34.934:E/AndroidRuntime(24283):位于android.app.ActivityThread.main(ActivityThread.java:4960)
01-22 04:15:34.934:E/AndroidRuntime(24283):位于java.lang.reflect.Method.Invokenactive(本机方法)
01-22 04:15:34.934:E/AndroidRuntime(24283):在java.lang.reflect.Method.invoke(Method.java:511)
01-22 04:15:34.934:E/AndroidRuntime(24283):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
01-22 04:15:34.934:E/AndroidRuntime(24283):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
01-22 04:15:34.934:E/AndroidRuntime(24283):在dalvik.system.NativeStart.main(本机方法)
您尝试过我的解决方案吗?activeSession=new Session.Builder(mainActivity).setApplicationId(appId).build();在这里,我在登录后访问其他屏幕中的会话,因此我将mainactivity替换为当前活动??是的,但是您必须将我提到的onActivityResult部分放入activityMainActivity无法解析为变量,您能检查语法吗?如果您在活动中执行此操作,请使用“this”构造函数会话。Builder(Transaction.HttpAsyncTask)未定义,如果我使用“this”代替主活动