我从一个引用的站点获取此代码以获取列表中的Twitter提要,但我得到一个错误JsonException以上 提到请需要一些帮助,在解决错误如何解决com.google.gson.JsonException异常:java IllegalStateException:期望BEGIN_OBJECT,但是在第1行的字符串coulmn 10
public class TwitterAPI {
private String twitterApiKey;
private String twitterAPISecret;
final static String TWITTER_TOKEN_URL =
"https://api.twitter.com/oauth2/token";
final static String TWITTER_STREAM_URL =
"https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=";
public TwitterAPI(String twitterAPIKey, String twitterApiSecret) {
this.twitterApiKey = twitterAPIKey;
this.twitterAPISecret = twitterApiSecret;
}
public ArrayList<TwitterTweet> getTwitterTweets(String screenName) {
ArrayList<TwitterTweet> twitterTweetArrayList = null;
try {
String twitterUrlApiKey = URLEncoder.encode(twitterApiKey, "UTF-8");
String twitterUrlApiSecret = URLEncoder.encode(twitterAPISecret,
"UTF-8");
String twitterKeySecret = twitterUrlApiKey + ":" +
twitterUrlApiSecret;
String twitterKeyBase64 =
Base64.encodeToString(twitterKeySecret.getBytes(), Base64.NO_WRAP);
TwitterAuthToken twitterAuthToken =
getTwitterAuthToken(twitterKeyBase64);
twitterTweetArrayList = getTwitterTweets(screenName,
twitterAuthToken);
} catch (UnsupportedEncodingException ex) {
} catch (IllegalStateException ex1) {
}
return twitterTweetArrayList;
}
public ArrayList<TwitterTweet> getTwitterTweets(String screenName,
TwitterAuthToken twitterAuthToken) {
ArrayList<TwitterTweet> twitterTweetArrayList = null;
if (twitterAuthToken != null &&
twitterAuthToken.token_type.equals("bearer")) {
HttpGet httpGet = new HttpGet(TWITTER_STREAM_URL + screenName);
httpGet.setHeader("Authorization", "Bearer " +
twitterAuthToken.access_token);
httpGet.setHeader("Content-Type", "application/json");
HttpUtil httpUtil = new HttpUtil();
String twitterTweets = httpUtil.getHttpResponse(httpGet);
twitterTweetArrayList = convertJsonToTwitterTweet(twitterTweets);
}
return twitterTweetArrayList;
}
public TwitterAuthToken getTwitterAuthToken(String twitterKeyBase64) throws
UnsupportedEncodingException {
HttpPost httpPost = new HttpPost(TWITTER_TOKEN_URL);
httpPost.setHeader("Authorization", "Basic " + twitterKeyBase64);
httpPost.setHeader("Content-Type", "application/x-www-form-
urlencoded;charset=UTF-8");
httpPost.setEntity(new StringEntity("grant_type=client_credentials"));
HttpUtil httpUtil = new HttpUtil();
String twitterJsonResponse = httpUtil.getHttpResponse(httpPost);
return convertJsonToTwitterAuthToken(twitterJsonResponse);
}
private TwitterAuthToken convertJsonToTwitterAuthToken(String jsonAuth) {
TwitterAuthToken twitterAuthToken = null;
if (jsonAuth != null && jsonAuth.length() > 0) {
try {
Gson gson = new Gson();
twitterAuthToken = gson.fromJson(jsonAuth,
TwitterAuthToken.class);
} catch (IllegalStateException ex) {
}
}
return twitterAuthToken;
}
private ArrayList<TwitterTweet> convertJsonToTwitterTweet(String
twitterTweets) {
ArrayList<TwitterTweet> twitterTweetArrayList = null;
if (twitterTweets != null && twitterTweets.length() > 0) {
try {
Gson gson = new Gson();
twitterTweetArrayList = gson.fromJson(twitterTweets, new
TypeToken<ArrayList<TwitterTweet>>() {
}.getType());
} catch (IllegalStateException e) {
}
}
return twitterTweetArrayList;
}
private class TwitterAuthToken {
String token_type;
String access_token;
}
的logcat:
12月2日至12日:10:27.684:E/AndroidRuntime(30448):致命异常: 的AsyncTask# 1 02-12 12:10:27.684:E/AndroidRuntime(30448): java.lang.RuntimeException:执行时发生错误 doInBackground()02-12 12:10:27.684:E/AndroidRuntime(30448):at android.os.AsyncTask $ 3.done(AsyncTask.java:299)02 -12 12:10:27.684: E/AndroidRuntime(30448):at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352) 02-12 12:10:27.684:E/AndroidRuntime(30448) :at java.util.concurrent.FutureTask.setException(FutureTask.java:219) 02-12 12:10:27.684:E/AndroidRuntime(30448):at java.util.concurrent.FutureTask.run(FutureTask。 java:239)02-12 12:10:27.684:E/AndroidRuntime(30448):at android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:230)02-12 12:10 :27.684:E/AndroidRuntime(30448):at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 02-12 12:10:27.684:E/AndroidRuntime(30448):at java.util .concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:573) 02-12 12:10:27.684:E/AndroidRuntime(30448):at java.lang.Thread.run(Thread.java:864)02- 12 12:10:27.684: E/AndroidRuntime(30448):引起: com.google.gson.JsonSyntaxException:java.lang.IllegalStateException: 预期的BEGIN_OBJECT,但STRING在第1行10 02-12 12: 10:27.684:E/AndroidRuntime(30448):在 com.google.gson.internal.bind.ReflectiveTypeAdapterFactory $ Adapter.read(ReflectiveTypeAdapterFactory.java:180) 02-12 12:10:27.684:E/AndroidRuntime(30448):at com.google.gson.Gson.fromJson(Gson.java:755)02-12 12:10:27.684: E/AndroidRuntime(30448 ):at com.google.gson.Gson.fromJson(Gson.java:721)02-12 12:10:27.684: E/AndroidRuntime(30448):at com.google.gson.Gson.fromJson(Gson .java:670)02-12 12:10:27.684: E/AndroidRuntime(30448):at com.google.gson.Gson.fromJson(Gson.java:642)02-12 12:10:27.684: E/AndroidRuntime(30448):at com.app.movie_name_rating.TwitterAPI.convertJsonToTwitterAuthToken(TwitterAPI.java:70) 02-12 12:10:27.684:E/AndroidRuntime(30448):at com.app.movie_name_rating。 TwitterAPI.getTwitterAuthToken(TwitterAPI。 java:62) 02-12 12:10:27.684:E/AndroidRuntime(30448):at com.app.movie_name_rating.TwitterAPI.getTwitterTweets(TwitterAPI.java:34) 02-12 12:10:27.684:E/AndroidRuntime(30448):at com.app.movie_name_rating.TwitterAsyncTask.doInBackground(TwitterAsyncTask.java:22)02-12 12:10:27.684:E/AndroidRuntime(30448):at com.app.movie_name_rating.TwitterAsyncTask。 doInBackground(TwitterAsyncTask.java:1) 02-12 12:10:27.684:E/AndroidRuntime(30448):at android.os.AsyncTask $ 2.call(AsyncTask.java:287)02-12 12:10:27.684 : E/AndroidRuntime(30448):at java.util.concurrent.FutureTask.run(FutureTask.java:234)02-12 12:10:27.684:E/AndroidRuntime(30448):... 4更多02 -12 12:10:27。684: E/AndroidRuntime(30448):java.lang.IllegalStateException:致 预期BEGIN_OBJECT但STRING位于第1行的列10月2日至十二日 12:10:27.684:E/AndroidRuntime(30448):在 COM .google.gson.stream.JsonReader.expect(JsonReader.java:339)02-12 12:10:27.684:E/AndroidRuntime(30448):在 com.google.gson.stream.JsonReader.beginObject(JsonReader。 java:322) 02-12 12:10:27.684:E/AndroidRuntime(30448):at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory $ Adapter.read(ReflectiveTypeAdapterFactory.java:168) 02-12 12 :10:27.684:E/AndroidRuntime(30448):... 15更
首先记录你的回答,并检查你是否得到正确的价值。 – 2015-02-12 07:08:42
我写了一个解决这个问题的方法。 这里见我的帖子:http://stackoverflow.com/a/31604097/2749361 – 2015-07-24 07:59:17