Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Twitter Android SDK not executing Callback

I'm running this code with a Twitter handle I'm pretty sure doesn't exist in order to test error handling. The breakpoints on the Callback are never hit, neither for success nor failure.

Any pointers on why this is?

Just as a note, this code works fine with a valid Twitter handle, but doesn't call the Callback either.

final Callback<Tweet> actionCallback = new Callback<Tweet>() {
    @Override
    public void success(Result<Tweet> result) {
        int x = 1;
        x++; // This code is just so I can put a breakpoint here
    }
    @Override
    public void failure(TwitterException exception) {
        DialogManager.showOkDialog(context, R.string.twitter_feed_not_found);
    }
};

final UserTimeline userTimeline = new UserTimeline.Builder().screenName(handleStr + "dfdfddfdfdfasdf") // Handle that doesn't exist
        .includeReplies(false).includeRetweets(false).maxItemsPerRequest(5).build();

final TweetTimelineListAdapter adapter = new TweetTimelineListAdapter.Builder(context)
        .setTimeline(userTimeline)
        .setViewStyle(R.style.tw__TweetLightWithActionsStyle)
        .setOnActionCallback(actionCallback)
        .build();

listView.setAdapter(adapter);
like image 480
zundi Avatar asked Feb 07 '18 22:02

zundi


1 Answers

I think you misundestood the purpose of the actionCallback. From the source code of the TweetTimelineListAdapter you can see that this callback is for the actions on tweet view,ie, when you click on favorite icon for example. I've test with the favorite icon and the callback gets called.

Take a look at this comment at the getView method of the source code.

   /**
     * Returns a CompactTweetView by default. May be overridden to provide another view for the
     * Tweet item. If Tweet actions are enabled, be sure to call setOnActionCallback(actionCallback)
     * on each new subclass of BaseTweetView to ensure proper success and failure handling
     * for Tweet actions (favorite, unfavorite).
     */

The callback is not intended to handle a screenname that does not exist and indeed the actions/buttons of a specific tweet.

Hope this helps.

UPDATED: You don't need to detect any erros on UserTimeLine, since the builder does not throw any exception and the adapter will be empty, with no rows/views showing on the screen. But if you still need to detect some "error" in the loading you have to rely on the "next" method of the UserTimeLine.

Take a look

  userTimeline.next(null, new Callback<TimelineResult<Tweet>>() {
        @Override
        public void success(Result<TimelineResult<Tweet>> result) {

        }

        @Override
        public void failure(TwitterException exception) {
            Log.d("TAG",exception.getMessage());
        }
    });

This method shows the next tweet for the user, if the failure callback get called you will know for sure that this user does not have any tweet or the user does not exist.

like image 167
Cristiano Tenuta Avatar answered Nov 15 '22 09:11

Cristiano Tenuta