1

我在一个android项目中使用stackmob API,似乎成功完成后没有调用回调。我需要正常工作的功能是登录功能。我有以下从 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();        
            }
    } );
} 

调用该函数时,我已登录到 stackmob 并可以发布数据,但从未调用回调成功函数。有谁知道这是为什么,或者如何解决?难道我做错了什么?我需要知道登录是否成功在活动中设置状态。谢谢你。

虽然我没有找到答案,但我确实找到了解决方法。它不像让回调工作那么干净,但它完成了工作。这里是。

    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
        }
    }

问候,约瑟夫

4

1 回答 1

2

您的解决方法并没有真正奏效。StackMobSendResult 只是告诉您请求已发送,而不是已成功处理。你真正想要的是回调函数。

您的原始代码看起来正确,并且相同的代码对我有用。您可以尝试使用最新的 sdk (0.4.2) 吗? https://github.com/downloads/stackmob/StackMob_Android/stackmob-android-v0.4.2.zip 如果不起作用,您可以通过添加 StackMobCommon.LOGGING_ENABLED = true 来启用调试日志记录;在调用 StackMobCommon.init 之前到您的 onCreate。这样做,你应该会在你的 Logcat 中看到一些标记为 StackMob 的消息,你可以在这里发布它们吗?谢谢

于 2012-04-03T07:56:20.360 回答