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 に答える