我正在尝试通过改造来解析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;
}
}
答案 0 :(得分:1)
看起来您正在使用错误的模型对象进行JSON响应解析。您可以从twitter-kit-android中选择合适的一个。如果我理解正确Place.java正是您要找的。 p>