Обратный звонок при входе через Stackmob не срабатывает
Я использую 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 ответ
Ваш обходной путь на самом деле не работает. 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, вы можете опубликовать их здесь? Спасибо