Обратный вызов входа в Stackmob не срабатывает при успехе - PullRequest
1 голос
/ 02 апреля 2012

Я использую API стеммоба в проекте Android, и кажется, что обратные вызовы не вызываются при успешном завершении.Функция, которая мне нужна для корректной работы - это функция входа в систему.У меня есть следующая функция, которая вызывается из обработчика onClick:

    private void logIn()
    {
        Map params = new HashMap();
        EditText e = ( EditText ) findViewById( R.id.userNameEditText );
        params.put( "username", e.getText().toString() );
        e = ( EditText ) findViewById( R.id.passwordEditText );
        params.put( "password", e.getText().toString() );
        m_stackmob.login( params, new StackMobCallback()
        {
            @Override
            public void success( String response )//<--never called
            {
                Log.d( TAG, response );//<--Never see this in the log
                setLoggedIn();//<--UploadActivity member function never fires
            }

            @Override
            public void failure( StackMobException e )
            {
                Log.d( TAG, e.getMessage() );
                Toast.makeText( TimeTrackerUploadActivity.this, 
                                e.getMessage(), 
                                Toast.LENGTH_LONG ).show();        
            }
    } );
} 

Когда вызывается функция, я захожу в стек-моб и могу публиковать данные, но функция успеха обратного вызова никогда не вызывается.Кто-нибудь знает почему это или как это исправить?Я делаю что-то неправильно?Мне нужно знать, если логин удается установить состояние в деятельности.Спасибо.

Хотя я не нашел ответа на этот вопрос, я нашел обходной путь.Он не такой чистый, как работа с обратным вызовом, но он выполняет свою работу.Вот оно.

    private void logIn()
    {
        Map params = new HashMap();
        EditText e = ( EditText ) findViewById( R.id.userNameEditText );
        params.put( "username", e.getText().toString() );
        e = ( EditText ) findViewById( R.id.passwordEditText );
        params.put( "password", e.getText().toString() );
        StackMobRequestSendResult result = m_stackmob.login( params, new StackMobCallback()
        {
            @Override
            public void success( String response )
            {}

            @Override
            public void failure( StackMobException e )
            {
                Log.d( TAG, e.getMessage() );
                Toast.makeText( TimeTrackerUploadActivity.this, 
                                e.getMessage(), 
                                Toast.LENGTH_LONG ).show();
            }
        } );

        RequestSendStatus status = result.getStatus();
        if( status.compareTo( RequestSendStatus.SENT ) == 0 )
        {
            Log.d( TAG, "Login success detected!!!" );
            setLoggedIn();
        }
        else
        {
             //failure callback works and can handle this
        }
    }

С уважением, Джозеф

1 Ответ

2 голосов
/ 03 апреля 2012

Ваш обходной путь на самом деле не работает. StackMobSendResult просто сообщает вам, что запрос был отправлен, а не что он был успешно обработан. Что вам действительно нужно, так это функция обратного вызова.

Ваш оригинальный код выглядит правильно, и тот же код работает для меня. Не могли бы вы попробовать самую последнюю версию SDK (0.4.2)? https://github.com/downloads/stackmob/StackMob_Android/stackmob-android-v0.4.2.zip Если это не сработает, вы сможете включить ведение журнала отладки, добавив StackMobCommon.LOGGING_ENABLED = true; на ваш onCreate прямо перед вызовом StackMobCommon.init. Сделайте это, и вы должны увидеть некоторые сообщения с пометкой StackMob в вашем Logcat, вы можете опубликовать их здесь? Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...