Авторизация Facebook не работает внутри Android Asynctask или Thread

Работа с facebook в Android. Иногда мое приложение обналичивает устройство в режиме реального времени, когда я пытаюсь авторизовать Facebook в Android, а не в эмуляторе. Я использовал Android Facebook SDK. Поэтому я подумал, что потоки могут остановить это. Сначала попробовал асинтаск

Activity act=this;

private class fbwork extends AsyncTask<Facebook, Integer, String>
{

    @Override
    protected String doInBackground(Facebook... para)
    {
        // TODO Auto-generated method stub
        Log.d(tagg, "Entered async");
            if(loginflag==0)
            {
                try
                {
                    para[0].authorize(act, PERMISSIONS, new LoginDialogListener());
                }catch(Exception ex)
                {
                    Log.d(tagg,ex.getMessage());
                }
                Log.d(tagg, tagg.toString());
            }
            else
            {

                try {
                    logout();
                } catch (MalformedURLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }


        return "0";
    }

код вызова:

new fbwork().execute(facebook);

выдает ошибку: невозможно создать обработчик внутри потока, который не вызвал Looper.Prepare()

Итак, попробовал обычный способ резьбы.

public void loginprocesure() throws MalformedURLException, IOException
{
    final Activity ac=this;
    if(loginflag==0)
    {
        new Thread(new Runnable() {

            public void run() {
                // TODO Auto-generated method stub
                facebook.authorize(ac, PERMISSIONS, new LoginDialogListener());
            }
        }).start();

    }
    else
    {

        logout();
    }
}

Опять тот же результат. как-то это исправить!!!! Как остановить этот сбой приложения на реальном устройстве. Пожалуйста, помогите.


person AtanuCSE    schedule 18.02.2012    source источник


Ответы (3)


Я столкнулся с той же проблемой. Вы должны попытаться включить этот метод в цикл.

 Looper.prepare();
 new fbwork().execute(facebook);
 Looper.loop();
person Shahzad Imam    schedule 18.02.2012

Авторизация Facebook использует методы, которые обращаются к потоку событий, поэтому вам не нужно выполнять этот метод в другом потоке, а не в потоке событий.

Если вы столкнулись с проблемой при выполнении этого метода в обычном потоке событий, укажите эту проблему.

person jeet    schedule 18.02.2012
comment
Как я уже сказал, мое приложение несколько раз вылетало на реальном устройстве во время авторизации, не каждый раз, иногда. А также он отлично работает в эмуляторе. Поэтому я не могу найти фактическую проблему сбоя. - person AtanuCSE; 18.02.2012
comment
Не могли бы вы сказать мне, использует ли Facebook.request(me/friends,bundle) какие-либо темы? - person AtanuCSE; 18.02.2012

У меня тоже эта проблема. Я не мог заставить работать код AsyncTask.

Так что в итоге я использовал runOnUiThread. На эмуляторе работает, а на устройстве нет, я использую HTC Desire Android SDK 2.2.2. К сожалению, я даже не могу войти в Facebook с помощью Hackbook (пример проекта Facebook).

Вот код, использующий runOnUiThread: Приложение Android аварийно завершает работу после Публикация с помощью диалогов Facebook

person Lisa    schedule 04.05.2012