我已经在我的应用程序中集成了Facebook,在登录时工作得很好,但当我试图注销时,我得到了许多我无法解决的错误。在堆栈溢出(Facebook Log Out error in Android,Can't create handler inside thread which has not called Looper.prepare())中也有类似的问题,但针对该帖子的解决方案对我来说并不适用。下面是我的代码:
public class Main extends Activity {
DrawerLayout drawerlayout;
ListView LVdrawer;
ImageView toplogo;
View rL;
Facebook fb;
Handler handler;
@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.navigation_drawer);
rL = findViewById(R.id.toplogoaction);
handler=new Handler();
drawerlayout = (DrawerLayout) findViewById(R.id.drawer_layout);
LVdrawer = (ListView) findViewById(R.id.left_drawer);
LVdrawer.setAdapter(new CustomAdapter(this, 0));
fb=new Facebook(getString(R.string.APP_ID));
get();
LVdrawer.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
TextView ttt = (TextView) view.findViewById(R.id.detail);
String s = (String) ttt.getText();
drawerlayout.closeDrawers();
switch (s) {
case "Now":
if(fb.isSessionValid()){
Runnable runnable=new Runnable() {
@Override
public void run() {
handler.post(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
try {
Toast.makeText(getApplicationContext(), "Loggedout", Toast.LENGTH_SHORT).show();
fb.logout(getApplicationContext());
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
// TODO Auto-generated method stub
}
};
new Thread(runnable).start();
}
break;
}
}
});
}
@SuppressWarnings("deprecation")
private void get() {
SharedPreferences Logininfo = getSharedPreferences("accesstoken", MODE_PRIVATE);
if (Logininfo.getString("access_token", null) != null) {
fb.setAccessToken(Logininfo.getString("access_token", null));
if (Logininfo.getLong("access_expires", 0) != 0)
fb.setAccessExpires(Logininfo.getLong("access_expires", 0));
}
}
}
Logcat:
09-15 16:16:40.138: D/Facebook-Util(9594): GET URL: https://api.facebook.com/restserver.php?access_token=CAAMKZCWmSwAABAC5ZB3hbry1FLMNdsKssmaS1OpiUxCK9ZAnn3OCKclKNAJ0DTVaf5M6d9QREeTZAsJWKNFWrt65vH5STZBeW0dL9A1l59xSuuqh1RmZALDgFLIxZBiEsXTGE4bR1pkEFQZBA8DfK81ZAjbe1V34JBddgrr0UxKOYkNDqEJc1WWZB8H9TZCbMZCpZCEk6ESusNzxBldzpVKHZBnNNr&format=json&method=auth.expireSession
09-15 16:16:40.211: D/AndroidRuntime(9594): Shutting down VM
09-15 16:16:40.211: W/dalvikvm(9594): threadid=1: thread exiting with uncaught exception (group=0x415ecd40)
09-15 16:16:40.217: E/AndroidRuntime(9594): FATAL EXCEPTION: main
09-15 16:16:40.217: E/AndroidRuntime(9594): Process: com.example.apeonomy, PID: 9594
09-15 16:16:40.217: E/AndroidRuntime(9594): android.os.NetworkOnMainThreadException
09-15 16:16:40.217: E/AndroidRuntime(9594): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1145)
09-15 16:16:40.217: E/AndroidRuntime(9594): at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
09-15 16:16:40.217: E/AndroidRuntime(9594): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
09-15 16:16:40.217: E/AndroidRuntime(9594): at java.net.InetAddress.getAllByName(InetAddress.java:214)
09-15 16:16:40.217: E/AndroidRuntime(9594): at com.android.okhttp.internal.Dns$1.getAllByName(Dns.java:28)
09-15 16:16:40.217: E/AndroidRuntime(9594): at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:216)
09-15 16:16:40.217: E/AndroidRuntime(9594): at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:122)
09-15 16:16:40.217: E/AndroidRuntime(9594): at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:292)
09-15 16:16:40.217: E/AndroidRuntime(9594): at com.android.okhttp.internal.http.HttpEngine.sendSocketRequest(HttpEngine.java:255)
09-15 16:16:40.217: E/AndroidRuntime(9594): at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:206)
09-15 16:16:40.217: E/AndroidRuntime(9594): at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:345)
09-15 16:16:40.217: E/AndroidRuntime(9594): at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:296)
09-15 16:16:40.217: E/AndroidRuntime(9594): at com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:179)
09-15 16:16:40.217: E/AndroidRuntime(9594): at com.android.okhttp.internal.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:246)
09-15 16:16:40.217: E/AndroidRuntime(9594): at com.facebook.android.Util.openUrl(Util.java:224)
09-15 16:16:40.217: E/AndroidRuntime(9594): at com.facebook.android.Facebook.requestImpl(Facebook.java:804)
09-15 16:16:40.217: E/AndroidRuntime(9594): at com.facebook.android.Facebook.request(Facebook.java:707)
09-15 16:16:40.217: E/AndroidRuntime(9594): at com.facebook.android.Facebook.logoutImpl(Facebook.java:649)
09-15 16:16:40.217: E/AndroidRuntime(9594): at com.facebook.android.Facebook.logout(Facebook.java:642)
09-15 16:16:40.217: E/AndroidRuntime(9594): at com.digiapes.apeonomy.Main$1$1$1.run(Main.java:92)
09-15 16:16:40.217: E/AndroidRuntime(9594): at android.os.Handler.handleCallback(Handler.java:733)
09-15 16:16:40.217: E/AndroidRuntime(9594): at android.os.Handler.dispatchMessage(Handler.java:95)
09-15 16:16:40.217: E/AndroidRuntime(9594): at android.os.Looper.loop(Looper.java:136)
09-15 16:16:40.217: E/AndroidRuntime(9594): at android.app.ActivityThread.main(ActivityThread.java:5086)
09-15 16:16:40.217: E/AndroidRuntime(9594): at java.lang.reflect.Method.invokeNative(Native Method)
09-15 16:16:40.217: E/AndroidRuntime(9594): at java.lang.reflect.Method.invoke(Method.java:515)
09-15 16:16:40.217: E/AndroidRuntime(9594): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
09-15 16:16:40.217: E/AndroidRuntime(9594): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
09-15 16:16:40.217: E/AndroidRuntime(9594): at dalvik.system.NativeStart.main(Native Method)
09-15 16:16:46.330: I/Process(9594): Sending signal. PID: 9594 SIG: 9
使用AsyncTask后更新(日志目录):
09-15 16:42:11.022: D/Facebook-Util(14618): GET URL: https://api.facebook.com/restserver.php?access_token=CAAMKZCWmSwAABAC5ZB3hbry1FLMNdsKssmaS1OpiUxCK9ZAnn3OCKclKNAJ0DTVaf5M6d9QREeTZAsJWKNFWrt65vH5STZBeW0dL9A1l59xSuuqh1RmZALDgFLIxZBiEsXTGE4bR1pkEFQZBA8DfK81ZAjbe1V34JBddgrr0UxKOYkNDqEJc1WWZB8H9TZCbMZCpZCEk6ESusNzxBldzpVKHZBnNNr&format=json&method=auth.expireSession
09-15 16:42:12.626: W/dalvikvm(14618): threadid=12: thread exiting with uncaught exception (group=0x415ecd40)
09-15 16:42:12.630: E/AndroidRuntime(14618): FATAL EXCEPTION: AsyncTask #1
09-15 16:42:12.630: E/AndroidRuntime(14618): Process: com.example.apeonomy, PID: 14618
09-15 16:42:12.630: E/AndroidRuntime(14618): java.lang.RuntimeException: An error occured while executing doInBackground()
09-15 16:42:12.630: E/AndroidRuntime(14618): at android.os.AsyncTask$3.done(AsyncTask.java:300)
09-15 16:42:12.630: E/AndroidRuntime(14618): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
09-15 16:42:12.630: E/AndroidRuntime(14618): at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
09-15 16:42:12.630: E/AndroidRuntime(14618): at java.util.concurrent.FutureTask.run(FutureTask.java:242)
09-15 16:42:12.630: E/AndroidRuntime(14618): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
09-15 16:42:12.630: E/AndroidRuntime(14618): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
09-15 16:42:12.630: E/AndroidRuntime(14618): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
09-15 16:42:12.630: E/AndroidRuntime(14618): at java.lang.Thread.run(Thread.java:841)
09-15 16:42:12.630: E/AndroidRuntime(14618): Caused by: java.lang.IllegalArgumentException: Invalid context argument
09-15 16:42:12.630: E/AndroidRuntime(14618): at android.webkit.CookieSyncManager.createInstance(CookieSyncManager.java:90)
09-15 16:42:12.630: E/AndroidRuntime(14618): at com.facebook.internal.Utility.clearCookiesForDomain(Utility.java:324)
09-15 16:42:12.630: E/AndroidRuntime(14618): at com.facebook.internal.Utility.clearFacebookCookies(Utility.java:348)
09-15 16:42:12.630: E/AndroidRuntime(14618): at com.facebook.Session.closeAndClearTokenInformation(Session.java:801)
09-15 16:42:12.630: E/AndroidRuntime(14618): at com.facebook.android.Facebook.logoutImpl(Facebook.java:665)
09-15 16:42:12.630: E/AndroidRuntime(14618): at com.facebook.android.Facebook.logout(Facebook.java:642)
09-15 16:42:12.630: E/AndroidRuntime(14618): at com.digiapes.apeonomy.Main$myAsy.doInBackground(Main.java:164)
09-15 16:42:12.630: E/AndroidRuntime(14618): at com.digiapes.apeonomy.Main$myAsy.doInBackground(Main.java:1)
09-15 16:42:12.630: E/AndroidRuntime(14618): at android.os.AsyncTask$2.call(AsyncTask.java:288)
09-15 16:42:12.630: E/AndroidRuntime(14618): at java.util.concurrent.FutureTask.run(FutureTask.java:237)
09-15 16:42:12.630: E/AndroidRuntime(14618): ... 4 more
发布于 2015-04-24 14:27:12
在com.facebook包中的FacebookSDK中创建此类
package com.facebook;
import android.content.Context;
public class Door {
public static void initializeStaticContext(Context context) {
Session.initializeStaticContext(context);
}
}
在调用注销之前调用Door.initializeStaticContext(this.getApplicationContext());
https://stackoverflow.com/questions/25846260
复制相似问题