Facebook登录了Android SDK 3.0导致ANR的或不工作 [英] Facebook login with Android SDK 3.0 causing ANRs or not working at all

查看:219
本文介绍了Facebook登录了Android SDK 3.0导致ANR的或不工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

为了在一个Android应用程序登录用户到Facebook,我尝试使用下面的code。用户已经登录后,他们所有的朋友的位置应该获取。

不幸的是,code使ANR数有时(如在谷歌Play开发者控制台报告的),有时是行不通的。如果我删除里面Facebook应用程序(撤消权限),再次显示在下次启动Android应用程序的权限对话框。但是,如果应用程序有权限已,它会导致那些ANR的或只是退出没有成功。

好像部分正在和零部件都错了,不是吗?在下面的code登录和获取数据的正确方法?

 包com.my.application;进口java.util.Arrays中;
进口的java.util.List;
进口org.json.JSONArray;
进口org.json.JSONObject;
进口android.app.Activity;
进口android.app.ProgressDialog;
进口android.content.Intent;
进口android.os.Bundle;
。进口的Andr​​oid preference preferenceManager。
导入com.facebook *。
进口com.facebook.Session.OpenRequest;
进口com.facebook.Session.StatusCallback;公共类FBLocations延伸活动{    私人Session.StatusCallback fbStatusCallback =新Session.StatusCallback(){
        @覆盖
        公共无效呼叫(会话的会话,SessionState会状态,异常除外){//回调会话状态的变化
            如果(state.isOpened()){
                Request.executeGraphPathRequestAsync(会话,我的/朋友/的access_token =?+ session.getAccessToken()+&放大器;场= ID,名称,位置和放大器;限= 500,新Request.Callback(){
                    @覆盖
                    公共无效onCompleted(响应响应){
                        如果(响应!= NULL){
                            //做点什么以<应答GT;现在
                        }
                    }
                });
            }
        }
    };    保护无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        尝试{
            openActiveSession(这一点,真的,fbStatusCallback,Arrays.asList(friends_location));
        }
        赶上(例外五){
            e.printStackTrace();
        }
    }    私有静态会话openActiveSession(活动活动,布尔allowLoginUI,StatusCallback回调,列表与LT;弦乐>权限){
        OpenRequest openRequest =新OpenRequest(activity).setPermissions(permissions).setLoginBehavior(SessionLoginBehavior.SSO_WITH_FALLBACK).setCallback(callback).setDefaultAudience(SessionDefaultAudience.FRIENDS);
        会话的会话=新Session.Builder(活动).build();
        如果(SessionState.CREATED_TOKEN_LOADED.equals(session.getState())|| allowLoginUI){
            Session.setActiveSession(会话);
            session.openForRead(openRequest);
            返回会议;
        }
        返回null;
    }    @覆盖
    公共无效的onActivityResult(INT申请code,INT结果code,意图数据){
        super.onActivityResult(要求code,结果code,数据);
        Session.getActiveSession()的onActivityResult(这一点,要求code,结果code,数据)。
    }}

我还添加应用程序的关键哈希至Facebook,调试和生产。不知道如果填充 = 已被写入为好。

我不能跟随Facebook的官方教程,我不会使用SDK的登录按钮,我也不在Android中使用的片段。

修改(2013年1月7日):

Hartok 建议更换 session.isOpened()通过 state.isOpened()在回调的()调用方法,事情所有的测试中50%的工作之中,现在。然而,也有一些问题。在某些情况下,一切工作正常,在其他一些情况下(没有我做不同的事情),但在LogCat中出现以下错误:

 一月一日至七日:55:29.882:W / System.err的(30572):com.facebook.FacebookException:登录尝试中止。
在com.facebook.Session.close(Session.java:572)
在com.facebook.Session.setActiveSession(Session.java:755)
在my.app.package.FBImport.openActiveSession(FBImport.java:145)//这是:Session.setActiveSession(会话);
在my.app.package.FBImport.access $ 5(FBImport.java:139)
在my.app.package.FBImport $ 4.run(FBImport.java:124)

是什么原因导致这个错误?客户的问题或服务器问题?应用程序似乎后冻结(ANR),顺便说一下。

如果我尝试按顺序连接两次,我看到下面的LogCat中输出:

  java.lang.IllegalStateException:无法执行任务:任务已在运行。
在android.os.AsyncTask.executeOnExecutor(AsyncTask.java:550)
在android.os.AsyncTask.execute(AsyncTask.java:511)
在com.facebook.RequestAsyncTask.executeOnSettingsExecutor(RequestAsyncTask.java:186)
在com.facebook.Request.executeBatchAsync(Request.java:1094)
在com.facebook.Request.executeBatchAsync(Request.java:1073)
在com.facebook.Request.executeBatchAsync(Request.java:1055)
在com.facebook.Request.executeAsync(Request.java:852)

这是为什么?为什么任务仍在运行?

ANR描述(ANR keyDispatchingTimedOut):

  DALVIK主题:
(互斥:TLL = 0 TSL = 0 TSCL = 0 GHL = 0)主PRIO = 5 TID = 1 NATIVE
  |组=主SCOUNT = 1 dsCount = 0 = OBJ自我0x4184e9a0 = 0x40011010
  | sysTid = 19301漂亮= 0 =附表0/0 = CGRP处理应用= 1074414556
  |状态= S schedstat =(906984000 397085000 2526)UTM = 66 STM = 24芯= 0
  #00的pc 00017ee4 /system/lib/libc.so(epoll_wait + 12)
  #01件00014b09 /system/lib/libutils.so(机器人::活套:: pollInner(INT)+96)
  #02件00014d71 /system/lib/libutils.so(机器人::活套:: pollOnce(INT,INT *为int *,无效**)+ 104)
  #03件0005ed53 /system/lib/libandroid_runtime.so(机器人:: NativeMessageQueue :: pollOnce(_JNIEnv *,INT)+22)
  #04件0001e290 /system/lib/libdvm.so(dvmPlatformInvoke + 112)
  #05件0004d411 /system/lib/libdvm.so(dvmCallJNIMethod(无符号整型常量*,* JValue,方法常量*,螺纹*)+ 396)
  #06件000276a0 /system/lib/libdvm.so
  #07件0002b57c /system/lib/libdvm.so(dvmInter preT(螺纹*,方法常量*,* JValue)+ 184)
  #08件0005ff07 /system/lib/libdvm.so(dvmInvokeMethod(*的对象,方法常量*,* ArrayObject的,ArrayObject的*,* ClassObject,布尔)+374)
  #09件000677e1 /system/lib/libdvm.so
  #10件000276a0 /system/lib/libdvm.so
  #11件0002b57c /system/lib/libdvm.so(dvmInter preT(螺纹*,方法常量*,* JValue)+ 184)
  #12件0005fc31 /system/lib/libdvm.so(dvmCallMethodV(螺纹*,方法常量*,*对象,布尔,JValue *,性病:: __ va_list的)272)
  #13件000499fb /system/lib/libdvm.so
  #14件00046871 /system/lib/libandroid_runtime.so
  #15件00047533 /system/lib/libandroid_runtime.so(机器人:: AndroidRuntime ::开始(字符常量*,字符常量*)+ 390)
  #16件00000db7 /系统/斌/ app_process
  #17件0001271f /system/lib/libc.so(__libc_init + 38)
  #18件00000ae8 /系统/斌/ app_process
  在android.os.MessageQueue.nativePollOnce(本机方法)
  在android.os.MessageQueue.next(MessageQueue.java:125)
  在android.os.Looper.loop(Looper.java:124)
  在android.app.ActivityThread.main(ActivityThread.java:5039)
  在java.lang.reflect.Method.invokeNative(本机方法)
  在java.lang.reflect.Method.invoke(Method.java:511)
  在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:793)
  在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
  在dalvik.system.NativeStart.main(本机方法)AsyncTask的#2PRIO = 5 TID = 17 WAIT
  |组=主SCOUNT = 1 dsCount = 0 = OBJ自我0x4205f6d0 = 0x6742f940
  | sysTid = 19354漂亮= 10 =附表0/0 = CGRP应用/ bg_non_interactive手柄= 1732251672
  |状态= S schedstat =(82839000 103493000 646)UTM = 5 STM = 3核心= 0
  在java.lang.Object.wait(本机方法)
   - 等待针对<&0x4205f7f0 GT; (一java.lang.VMThread)由TID = 17(AsyncTask的#2)持有
  在java.lang.Thread.parkFor(Thread.java:1231)
  在sun.misc.Unsafe.park(Unsafe.java:323)
  在java.util.concurrent.locks.LockSupport.park(LockSupport.java:159)
  在java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2019)
  在java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:413)
  在java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1013)
  在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1073)
  在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:573)
  在java.lang.Thread.run(Thread.java:856)Binder_3PRIO = 5 TID = 16 NATIVE
  |组=主SCOUNT = 1 dsCount = 0 = OBJ自我0x41fed668 = 0x41838008
  | sysTid = 19330漂亮= 0 =附表0/0 = CGRP处理应用= 1742766600
  |状态= S schedstat =(1078000 818000 10)UTM = 0 STM = 0核心= 0
  #00的pc 00016fe4 /system/lib/libc.so(__ioctl + 8)
  #01件0002a97d /system/lib/libc.so(IOCTL + 16)
  #02件00016ba1 /system/lib/libbinder.so(机器人:: IPCThreadState :: talkWithDriver(布尔)+132)
  #03件00017363 /system/lib/libbinder.so(机器人:: IPCThreadState :: joinThreadPool(布尔)+154)
  #04件0001b15d /system/lib/libbinder.so
  #05件00011267 /system/lib/libutils.so(机器人::螺纹:: _ threadLoop(无效*)+ 114)
  #06件0004679f /system/lib/libandroid_runtime.so(机器人:: AndroidRuntime :: javaThreadShell(无效*)+ 66)
  #07件00010dcd /system/lib/libutils.so
  #08件0000e3d8 /system/lib/libc.so(__thread_entry + 72)
  #09件0000dac4 /system/lib/libc.so(pthread_create的+ 160)
  在dalvik.system.NativeStart.run(本机方法)池1线程5PRIO = 5 TID = 15 WAIT
  |组=主SCOUNT = 1 dsCount = 0 = OBJ自我0x420423d0 = 0x673d8ab8
  | sysTid = 19329漂亮= 0 =附表0/0 = CGRP处理应用= 1732087560
  |状态= S schedstat =(6292000 7083000 36)UTM = 0 STM = 0核心= 2
  在java.lang.Object.wait(本机方法)
   - 等待针对<&0x42042528 GT; (一java.lang.VMThread)工业贸易署举行= 15(池1线程5)
  在java.lang.Thread.parkFor(Thread.java:1231)
  在sun.misc.Unsafe.park(Unsafe.java:323)
  在java.util.concurrent.locks.LockSupport.park(LockSupport.java:159)
  在java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2019)
  在java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:413)
  在java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1013)
  在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1073)
  在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:573)
  在java.lang.Thread.run(Thread.java:856)池1线程4PRIO = 5 TID = 14 WAIT
  |组=主SCOUNT = 1 dsCount = 0 = OBJ自我0x42039040 = 0x673cb248
  | sysTid = 19328漂亮= 0 =附表0/0 = CGRP处理应用= 1732032152
  |状态= S schedstat =(8178000 7047000 32)UTM = 0 STM = 0 =核心3
  在java.lang.Object.wait(本机方法)
   - 等待针对<&0x42039160 GT; (一java.lang.VMThread)工业贸易署举行= 14(池1线程4)
  在java.lang.Thread.parkFor(Thread.java:1231)
  在sun.misc.Unsafe.park(Unsafe.java:323)
  在java.util.concurrent.locks.LockSupport.park(LockSupport.java:159)
  在java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2019)
  在java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:413)
  在java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1013)
  在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1073)
  在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:573)
  在java.lang.Thread.run(Thread.java:856)池1线程3PRIO = 5 TID = 13 WAIT
  |组=主SCOUNT = 1 dsCount = 0 = OBJ自我0x42027140 = 0x673c95f8
  | sysTid = 19327漂亮= 0 =附表0/0 = CGRP处理应用= 1698808232
  |状态= S schedstat =(10642000 19156000 34)UTM = 1 STM = 0核心= 1
  在java.lang.Object.wait(本机方法)
   - 等待针对<&0x42027260 GT; (一java.lang.VMThread)工业贸易署举行= 13(池1线程3)
  在java.lang.Thread.parkFor(Thread.java:1231)
  在sun.misc.Unsafe.park(Unsafe.java:323)
  在java.util.concurrent.locks.LockSupport.park(LockSupport.java:159)
  在java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2019)
  在java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:413)
  在java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1013)
  在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1073)
  在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:573)
  在java.lang.Thread.run(Thread.java:856)池1线程2PRIO = 5 TID = 12 WAIT
  |组=主SCOUNT = 1 dsCount = 0 = OBJ自我0x4201d958 = 0x672cd008
  | sysTid = 19326漂亮= 0 =附表0/0 = CGRP处理应用= 1731988480
  |状态= S schedstat =(17725000 16571000 59)UTM = 1 STM = 0 =核心3
  在java.lang.Object.wait(本机方法)
   - 等待针对<&0x4201da78 GT; (一java.lang.VMThread)工业贸易署举行= 12(池1线程2)
  在java.lang.Thread.parkFor(Thread.java:1231)
  在sun.misc.Unsafe.park(Unsafe.java:323)
  在java.util.concurrent.locks.LockSupport.park(LockSupport.java:159)
  在java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2019)
  在java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:413)
  在java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1013)
  在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1073)
  在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:573)
  在java.lang.Thread.run(Thread.java:856)池1线程1PRIO = 5 TID = 11 WAIT
  |组=主SCOUNT = 1 dsCount = 0 = OBJ自我0x420156c8 = 0x65dc8818
  | sysTid = 19325漂亮= 0 =附表0/0 = CGRP处理应用= 1728232912
  |状态= S schedstat =(11166000 9311000 77)UTM = 0 STM = 1核心= 2
  在java.lang.Object.wait(本机方法)
   - 等待针对<&0x42015810 GT; (一java.lang.VMThread)工业贸易署举行= 11(池1线程1)
  在java.lang.Thread.parkFor(Thread.java:1231)
  在sun.misc.Unsafe.park(Unsafe.java:323)
  在java.util.concurrent.locks.LockSupport.park(LockSupport.java:159)
  在java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2019)
  在java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:413)
  在java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1013)
  在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1073)
  在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:573)
  在java.lang.Thread.run(Thread.java:856)AsyncTask的#1PRIO = 5 TID = 10 WAIT
  |组=主SCOUNT = 1 dsCount = 0 = OBJ自我0x41fb5990 = 0x63bd3008
  | sysTid = 19318漂亮= 10 =附表0/0 = CGRP应用/ bg_non_interactive手柄= 1748684416
  |状态= S schedstat =(24263000 18668000 33)UTM = 1 STM = 1核心= 1
  在java.lang.Object.wait(本机方法)
   - 等待针对<&0x41fd07d0 GT; (一java.lang.VMThread)由TID = 10(AsyncTask的#1)举行
  在java.lang.Thread.parkFor(Thread.java:1231)
  在sun.misc.Unsafe.park(Unsafe.java:323)
  在java.util.concurrent.locks.LockSupport.park(LockSupport.java:159)
  在java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2019)
  在java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:413)
  在java.util.concurrent.ThreadPoolExecutor中...


解决方案

登录尝试中止被解雇了,因为 Session.setActiveSession()而previous会议目前正在开叫。

有没有可能是你叫 Session.setActiveSession()两次?

您可以试试这个code。这不是测试,但部分来自SessionLoginSample。

 私有静态会话openActiveSession(活动活动,布尔allowLoginUI,StatusCallback回调,列表与LT;弦乐>权限,捆绑savedInstanceState){    OpenRequest openRequest =新OpenRequest(activity).setPermissions(permissions).setLoginBehavior(SessionLoginBehavior.SSO_WITH_FALLBACK).setCallback(callback).setDefaultAudience(SessionDefaultAudience.FRIENDS);    会话的会话= Session.getActiveSession();
    如果(会话== NULL){
        如果(savedInstanceState!= NULL){
            会话= Session.restoreSession(这一点,空,fbStatusCallback,savedInstanceState);
        }
        如果(会话== NULL){
            会话=新的Session(本);
        }
        Session.setActiveSession(会话);
        如果(session.getState()。等于(SessionState.CREATED_TOKEN_LOADED)|| allowLoginUI){
            session.openForRead(openRequest);
            返回会议;
        }
    }    返回null;
}

In order to log a user in to Facebook in an Android app, I'm trying to use the following code. After the user has been logged in, all their friends' locations should fetched.

Unfortunately, this code causes ANRs sometimes (as reported in the Google Play developer console) and sometimes it just doesn't work. If I remove the app inside Facebook (revoke permissions), the permission dialog is shown again on the next launch of the Android app. But if the app has the permissions already, it causes those ANRs or just quits without success.

Seems like parts are working and parts are wrong, doesn't it? Is the following code a correct way of logging in and fetching data?

package com.my.application;

import java.util.Arrays;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONObject;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.preference.PreferenceManager;
import com.facebook.*;
import com.facebook.Session.OpenRequest;
import com.facebook.Session.StatusCallback;

public class FBLocations extends Activity {

    private Session.StatusCallback fbStatusCallback = new Session.StatusCallback() {
        @Override
        public void call(Session session, SessionState state, Exception exception) { // callback for session state changes
            if (state.isOpened()) {
                Request.executeGraphPathRequestAsync(session, "me/friends/?access_token="+session.getAccessToken()+"&fields=id,name,location&limit=500", new Request.Callback() {
                    @Override
                    public void onCompleted(Response response) {
                        if (response != null) {
                            // do something with <response> now
                        }
                    }
                });
            }
        }
    };

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        try {
            openActiveSession(this, true, fbStatusCallback, Arrays.asList("friends_location"));
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static Session openActiveSession(Activity activity, boolean allowLoginUI, StatusCallback callback, List<String> permissions) {
        OpenRequest openRequest = new OpenRequest(activity).setPermissions(permissions).setLoginBehavior(SessionLoginBehavior.SSO_WITH_FALLBACK).setCallback(callback).setDefaultAudience(SessionDefaultAudience.FRIENDS);
        Session session = new Session.Builder(activity).build();
        if (SessionState.CREATED_TOKEN_LOADED.equals(session.getState()) || allowLoginUI) {
            Session.setActiveSession(session);
            session.openForRead(openRequest);
            return session;
        }
        return null;
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
    }

}

I've also added the app's key hashes to Facebook, both debug and production. Wasn't sure if the padding = has to be written as well.

I couldn't follow Facebook's official tutorial as I won't use the SDK's login button nor do I use fragments in Android.

Edit (7th January 2013):

After Hartok suggested to replace session.isOpened() by state.isOpened() in the callback's call() method, things work in 50% of all test runs now. Nevertheless, there are some problems. In some cases, everything works fine, in some other cases (without me doing anything differently), there is the following error in LogCat:

01-07 01:55:29.882: W/System.err(30572): com.facebook.FacebookException: Log in attempt aborted.
at com.facebook.Session.close(Session.java:572)
at com.facebook.Session.setActiveSession(Session.java:755)
at my.app.package.FBImport.openActiveSession(FBImport.java:145) // this is: Session.setActiveSession(session);
at my.app.package.FBImport.access$5(FBImport.java:139)
at my.app.package.FBImport$4.run(FBImport.java:124)

What causes this error? Client problem or server problem? App seems to freeze (ANR) after that, by the way.

And if I try to connect twice in sequence, I see the following LogCat output:

java.lang.IllegalStateException: Cannot execute task: the task is already running.
at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:550)
at android.os.AsyncTask.execute(AsyncTask.java:511)
at com.facebook.RequestAsyncTask.executeOnSettingsExecutor(RequestAsyncTask.java:186)
at com.facebook.Request.executeBatchAsync(Request.java:1094)
at com.facebook.Request.executeBatchAsync(Request.java:1073)
at com.facebook.Request.executeBatchAsync(Request.java:1055)
at com.facebook.Request.executeAsync(Request.java:852)

Why is that? Why is the task still running?

ANR description (ANR keyDispatchingTimedOut):

DALVIK THREADS:
(mutexes: tll=0 tsl=0 tscl=0 ghl=0)

"main" prio=5 tid=1 NATIVE
  | group="main" sCount=1 dsCount=0 obj=0x4184e9a0 self=0x40011010
  | sysTid=19301 nice=0 sched=0/0 cgrp=apps handle=1074414556
  | state=S schedstat=( 906984000 397085000 2526 ) utm=66 stm=24 core=0
  #00 pc 00017ee4 /system/lib/libc.so (epoll_wait+12)
  #01 pc 00014b09 /system/lib/libutils.so (android::Looper::pollInner(int)+96)
  #02 pc 00014d71 /system/lib/libutils.so (android::Looper::pollOnce(int, int*, int*, void**)+104)
  #03 pc 0005ed53 /system/lib/libandroid_runtime.so (android::NativeMessageQueue::pollOnce(_JNIEnv*, int)+22)
  #04 pc 0001e290 /system/lib/libdvm.so (dvmPlatformInvoke+112)
  #05 pc 0004d411 /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+396)
  #06 pc 000276a0 /system/lib/libdvm.so
  #07 pc 0002b57c /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184)
  #08 pc 0005ff07 /system/lib/libdvm.so (dvmInvokeMethod(Object*, Method const*, ArrayObject*, ArrayObject*, ClassObject*, bool)+374)
  #09 pc 000677e1 /system/lib/libdvm.so
  #10 pc 000276a0 /system/lib/libdvm.so
  #11 pc 0002b57c /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184)
  #12 pc 0005fc31 /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+272)
  #13 pc 000499fb /system/lib/libdvm.so
  #14 pc 00046871 /system/lib/libandroid_runtime.so
  #15 pc 00047533 /system/lib/libandroid_runtime.so (android::AndroidRuntime::start(char const*, char const*)+390)
  #16 pc 00000db7 /system/bin/app_process
  #17 pc 0001271f /system/lib/libc.so (__libc_init+38)
  #18 pc 00000ae8 /system/bin/app_process
  at android.os.MessageQueue.nativePollOnce(Native Method)
  at android.os.MessageQueue.next(MessageQueue.java:125)
  at android.os.Looper.loop(Looper.java:124)
  at android.app.ActivityThread.main(ActivityThread.java:5039)
  at java.lang.reflect.Method.invokeNative(Native Method)
  at java.lang.reflect.Method.invoke(Method.java:511)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
  at dalvik.system.NativeStart.main(Native Method)

"AsyncTask #2" prio=5 tid=17 WAIT
  | group="main" sCount=1 dsCount=0 obj=0x4205f6d0 self=0x6742f940
  | sysTid=19354 nice=10 sched=0/0 cgrp=apps/bg_non_interactive handle=1732251672
  | state=S schedstat=( 82839000 103493000 646 ) utm=5 stm=3 core=0
  at java.lang.Object.wait(Native Method)
  - waiting on <0x4205f7f0> (a java.lang.VMThread) held by tid=17 (AsyncTask #2)
  at java.lang.Thread.parkFor(Thread.java:1231)
  at sun.misc.Unsafe.park(Unsafe.java:323)
  at java.util.concurrent.locks.LockSupport.park(LockSupport.java:159)
  at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2019)
  at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:413)
  at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1013)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1073)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
  at java.lang.Thread.run(Thread.java:856)

"Binder_3" prio=5 tid=16 NATIVE
  | group="main" sCount=1 dsCount=0 obj=0x41fed668 self=0x41838008
  | sysTid=19330 nice=0 sched=0/0 cgrp=apps handle=1742766600
  | state=S schedstat=( 1078000 818000 10 ) utm=0 stm=0 core=0
  #00 pc 00016fe4 /system/lib/libc.so (__ioctl+8)
  #01 pc 0002a97d /system/lib/libc.so (ioctl+16)
  #02 pc 00016ba1 /system/lib/libbinder.so (android::IPCThreadState::talkWithDriver(bool)+132)
  #03 pc 00017363 /system/lib/libbinder.so (android::IPCThreadState::joinThreadPool(bool)+154)
  #04 pc 0001b15d /system/lib/libbinder.so
  #05 pc 00011267 /system/lib/libutils.so (android::Thread::_threadLoop(void*)+114)
  #06 pc 0004679f /system/lib/libandroid_runtime.so (android::AndroidRuntime::javaThreadShell(void*)+66)
  #07 pc 00010dcd /system/lib/libutils.so
  #08 pc 0000e3d8 /system/lib/libc.so (__thread_entry+72)
  #09 pc 0000dac4 /system/lib/libc.so (pthread_create+160)
  at dalvik.system.NativeStart.run(Native Method)

"pool-1-thread-5" prio=5 tid=15 WAIT
  | group="main" sCount=1 dsCount=0 obj=0x420423d0 self=0x673d8ab8
  | sysTid=19329 nice=0 sched=0/0 cgrp=apps handle=1732087560
  | state=S schedstat=( 6292000 7083000 36 ) utm=0 stm=0 core=2
  at java.lang.Object.wait(Native Method)
  - waiting on <0x42042528> (a java.lang.VMThread) held by tid=15 (pool-1-thread-5)
  at java.lang.Thread.parkFor(Thread.java:1231)
  at sun.misc.Unsafe.park(Unsafe.java:323)
  at java.util.concurrent.locks.LockSupport.park(LockSupport.java:159)
  at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2019)
  at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:413)
  at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1013)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1073)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
  at java.lang.Thread.run(Thread.java:856)

"pool-1-thread-4" prio=5 tid=14 WAIT
  | group="main" sCount=1 dsCount=0 obj=0x42039040 self=0x673cb248
  | sysTid=19328 nice=0 sched=0/0 cgrp=apps handle=1732032152
  | state=S schedstat=( 8178000 7047000 32 ) utm=0 stm=0 core=3
  at java.lang.Object.wait(Native Method)
  - waiting on <0x42039160> (a java.lang.VMThread) held by tid=14 (pool-1-thread-4)
  at java.lang.Thread.parkFor(Thread.java:1231)
  at sun.misc.Unsafe.park(Unsafe.java:323)
  at java.util.concurrent.locks.LockSupport.park(LockSupport.java:159)
  at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2019)
  at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:413)
  at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1013)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1073)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
  at java.lang.Thread.run(Thread.java:856)

"pool-1-thread-3" prio=5 tid=13 WAIT
  | group="main" sCount=1 dsCount=0 obj=0x42027140 self=0x673c95f8
  | sysTid=19327 nice=0 sched=0/0 cgrp=apps handle=1698808232
  | state=S schedstat=( 10642000 19156000 34 ) utm=1 stm=0 core=1
  at java.lang.Object.wait(Native Method)
  - waiting on <0x42027260> (a java.lang.VMThread) held by tid=13 (pool-1-thread-3)
  at java.lang.Thread.parkFor(Thread.java:1231)
  at sun.misc.Unsafe.park(Unsafe.java:323)
  at java.util.concurrent.locks.LockSupport.park(LockSupport.java:159)
  at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2019)
  at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:413)
  at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1013)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1073)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
  at java.lang.Thread.run(Thread.java:856)

"pool-1-thread-2" prio=5 tid=12 WAIT
  | group="main" sCount=1 dsCount=0 obj=0x4201d958 self=0x672cd008
  | sysTid=19326 nice=0 sched=0/0 cgrp=apps handle=1731988480
  | state=S schedstat=( 17725000 16571000 59 ) utm=1 stm=0 core=3
  at java.lang.Object.wait(Native Method)
  - waiting on <0x4201da78> (a java.lang.VMThread) held by tid=12 (pool-1-thread-2)
  at java.lang.Thread.parkFor(Thread.java:1231)
  at sun.misc.Unsafe.park(Unsafe.java:323)
  at java.util.concurrent.locks.LockSupport.park(LockSupport.java:159)
  at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2019)
  at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:413)
  at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1013)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1073)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
  at java.lang.Thread.run(Thread.java:856)

"pool-1-thread-1" prio=5 tid=11 WAIT
  | group="main" sCount=1 dsCount=0 obj=0x420156c8 self=0x65dc8818
  | sysTid=19325 nice=0 sched=0/0 cgrp=apps handle=1728232912
  | state=S schedstat=( 11166000 9311000 77 ) utm=0 stm=1 core=2
  at java.lang.Object.wait(Native Method)
  - waiting on <0x42015810> (a java.lang.VMThread) held by tid=11 (pool-1-thread-1)
  at java.lang.Thread.parkFor(Thread.java:1231)
  at sun.misc.Unsafe.park(Unsafe.java:323)
  at java.util.concurrent.locks.LockSupport.park(LockSupport.java:159)
  at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2019)
  at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:413)
  at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1013)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1073)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
  at java.lang.Thread.run(Thread.java:856)

"AsyncTask #1" prio=5 tid=10 WAIT
  | group="main" sCount=1 dsCount=0 obj=0x41fb5990 self=0x63bd3008
  | sysTid=19318 nice=10 sched=0/0 cgrp=apps/bg_non_interactive handle=1748684416
  | state=S schedstat=( 24263000 18668000 33 ) utm=1 stm=1 core=1
  at java.lang.Object.wait(Native Method)
  - waiting on <0x41fd07d0> (a java.lang.VMThread) held by tid=10 (AsyncTask #1)
  at java.lang.Thread.parkFor(Thread.java:1231)
  at sun.misc.Unsafe.park(Unsafe.java:323)
  at java.util.concurrent.locks.LockSupport.park(LockSupport.java:159)
  at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2019)
  at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:413)
  at java.util.concurrent.ThreadPoolExecutor...

解决方案

Log in attempt aborted is fired because Session.setActiveSession() is called while a previous Session was currently opening.

Is it possible that you call Session.setActiveSession() two times?

You could try this code. It was not tested, but it partly comes from SessionLoginSample.

private static Session openActiveSession(Activity activity, boolean allowLoginUI, StatusCallback callback, List<String> permissions, Bundle savedInstanceState) {

    OpenRequest openRequest = new OpenRequest(activity).setPermissions(permissions).setLoginBehavior(SessionLoginBehavior.SSO_WITH_FALLBACK).setCallback(callback).setDefaultAudience(SessionDefaultAudience.FRIENDS);

    Session session = Session.getActiveSession();
    if (session == null) {
        if (savedInstanceState != null) {
            session = Session.restoreSession(this, null, fbStatusCallback, savedInstanceState);
        }
        if (session == null) {
            session = new Session(this);
        }
        Session.setActiveSession(session);
        if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED) || allowLoginUI) {
            session.openForRead(openRequest);
            return session;
        }
    }

    return null;
}

这篇关于Facebook登录了Android SDK 3.0导致ANR的或不工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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