0

在我的应用程序中实现 Twitter 集成时,我发现了 Eclipse 调试器的以下奇怪之处。这是什么原因造成的?

我正在使用此 AsyncTask 使用 twitter4j 3.0.3 从 twitter 获取请求令牌。

    public class TwitterRequestAsync extends AsyncTask<Void, Void, RequestToken> {

        private Context context;

        public TwitterRequestAsync(Context context) {

            this.context = context;
        }

        @Override
        protected RequestToken doInBackground( Void... params ) {

            Twitter twitter = getTwitter();     // getTwitter() is in enclosing class
            try {
                RequestToken token = twitter.getOAuthRequestToken();
                return token;
            }
            catch (TwitterException e) {
                Log.e( TAG, e.getMessage(), e );
                return null;
            }
        }

        @Override
        protected void onPostExecute( RequestToken result ) {

            super.onPostExecute( result );
            if ( result != null ) {
                // stuffs concerning request token here
            }
        }

    }

当我调试此代码时,似乎在执行 getOAuthRequestToken() 时引发了异常,并且调试器显示执行的下一行在 catch 子句中,返回 null;

然而,返回给 onPostExecute(...) 的结果是一个有效的请求令牌,所以调试器正在做一些奇怪的事情。我已经清理了我的项目并多次重新启动 Eclipse,但这种行为没有改变。我坏了吗?

4

2 回答 2

1

正如您的自我回答所指出的,这是一个已知问题。我想指出它(和其他怪癖)记录在 Dalvik 文档中。您可以以官方但原始的形式找到它,或者以非官方但格式化的形式找到它——跳至“已知问题和限制”。

如果文档更突出,那就太好了。

于 2013-03-25T17:48:23.947 回答
1

这是一个已知的问题。看来这可能是 Dalvik VM 的问题。该方法的最后一个返回语句显示在调试器中执行。

将 doInBackground 正文更改为:

        @Override
        protected RequestToken doInBackground( Void... params ) {

            Twitter twitter = getTwitter();
            RequestToken token = null;
            try {
                token = twitter.getOAuthRequestToken();
            }
            catch (TwitterException e) {
                Log.e( TAG, e.getMessage(), e );
            }
            return token;
        }

使执行看起来按预期进行。

请参阅https://groups.google.com/forum/?fromgroups=#!topic/android-developers/DEU6JmdyFyM以获取有关该问题的旧提以及指向更早提及的链接。终于有人在https://code.google.com/p/android/issues/detail?id=34193为此创建了一个问题。

于 2013-03-24T22:13:47.210 回答