错误通过改造解析Twitter趋势/地点api

时间:2016-02-16 07:59:16

标签: android twitter retrofit

我正在尝试通过改造来解析twitter / trends /将api解析到我的Android应用程序,但是,我已经能够通过改造解析下面的api并获得我所需的所有数据:

https://api.twitter.com/1.1/search/tweets.json

https://api.twitter.com/1.1/trends/place.json使用相同的方法,但我得到了这个例外

  

GSON投掷“预期BEGIN_OBJECT但是BEGIN_ARRAY

以下是我的代码。我相信我的错误来自下面的代码之一,有些人应该请帮助我。

TwitterApiService.java

public interface TwitterApiService {
    @GET(ApiConstants.TWITTER_TREND_SEARCH_CODE )
    void getTweetTagList(
            @Header("Authorization") String authorization,
            @Query("id") String id,
            Callback<TweetTagList> callback
    );

    @FormUrlEncoded
    @POST("/oauth2/token")
    void getToken(
            @Header("Authorization") String authorization,
            @Field("grant_type") String grantType,
            Callback<TwitterTokenType> response
    );


}

TwitterServiceProvider.java

public class TwitterServiceProvider {
    private static final String TAG = TwitterServiceProvider.class.getName();

    private TwitterApiService mApi;
    private Bus mBus;

    public TwitterServiceProvider(TwitterApiService api, Bus bus) {
        this.mApi = api;
        this.mBus = bus;
    }

    @Subscribe
    public void onLoadTweets(final SearchTweetsTagEvent event) {
        mApi.getTweetTagList("Bearer " + event.twitterToken, event.id, new Callback<TweetTagList>() {
            @Override
            public void success(TweetTagList response, Response rawResponse) {
                mBus.post(new SearchTweetsTagEventOk(response));
            }

            @Override
            public void failure(RetrofitError error) {
                Log.e(TAG, error.toString(), error);
                mBus.post(new SearchTweetsEventFailed());
            }
        });
    }

    @Subscribe
    public void onGetToken(TwitterGetTokenEvent event) {
        try {
            mApi.getToken("Basic " + getBase64String(ApiConstants.BEARER_TOKEN_CREDENTIALS), "client_credentials", new Callback<TwitterTokenType>() {
                @Override
                public void success(TwitterTokenType token, Response response) {
                    PrefsController.setAccessToken(TwitterSearchApplication.getAppContext(), token.accessToken);
                    PrefsController.setTokenType(TwitterSearchApplication.getAppContext(), token.tokenType);
                    mBus.post(new TwitterGetTokenEventOk());
                }

                @Override
                public void failure(RetrofitError error) {
                    Log.e(TAG, error.toString(), error);
                    mBus.post(new TwitterGetTokenEventFailed());
                }
            });
        } catch (UnsupportedEncodingException e) {
            Log.e(TAG, e.toString(), e);
        }
    }


    /*private static String getResponseBody(InputStream inputStream) {
        StringBuilder sb = new StringBuilder();
        BufferedReader bReader = null;
        try {
            bReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8);

            String line = null;
            while ((line = bReader.readLine()) != null) {
                sb.append(line);
            }
        } catch (UnsupportedEncodingException ex) {
            Log.e("LOG", "", ex);
        } catch (ClientProtocolException ex1) {
            Log.e("LOG", "", ex1);
        } catch (IOException ex2) {
            Log.e("LOG", "", ex2);
        }
        return sb.toString();
    }*/

    /*// converts a string of JSON data into a Twitter object
    private static TweetList jsonToTweetLost(String result) {
        TweetList twits = null;
        if (result != null && result.length() > 0) {
            try {
                Gson gson = new Gson();
                twits = gson.fromJson(result, TweetList.class);
            } catch (IllegalStateException ex) {
                Log.e("LOG", "",ex);
            }
        }
        return twits;
    }*/


}

Tweet.java

public class Tweet {

    @SerializedName("created_at")
    public String dateCreated;

    @SerializedName("trends")
    public TweetTag trend;

    @Override
    public String  toString(){
        return trend.nameTag;
    }
}

TweetTagList.java

public class TweetList  {

    @SerializedName("")
    public ArrayList<Tweet> tweets;

}

SearchTweetsTagEvent.java

public class SearchTweetsTagEvent {
    public final String id;
    public final String twitterToken;

    public SearchTweetsTagEvent(String twitterToken, String hashtag) {
        this.id = hashtag;
        this.twitterToken = twitterToken;
    }
}

1 个答案:

答案 0 :(得分:1)

看起来您正在使用错误的模型对象进行JSON响应解析。您可以从twitter-kit-android中选择合适的一个。如果我理解正确Place.java正是您要找的。