Я использую твиттер-комплект для Android в своем приложении, следуя официальной документации (https://github.com/twitter/twitter-kit-android/wiki). Я вхожу в систему и получаю основные данные правильно и без проблем.
Когда я хочу получить твиты пользователя или временную шкалу, способ сделать это указывается, но всегда отображается в виде списка или recyclerview (https://github.com/twitter/twitter-kit-android/wiki/Show-Timelines).
Я видел эти примеры также в stackoverflow, где дается то же решение, но всегда преобразует данные в список или recyclerview.
Мой вопрос: есть ли способ получить только ответ JSON на запрос?
Ответы, которые я нашел, конкретно на это не отвечают.
Следующим способом можно получить список твитов, но я не могу применять фильтры поиска, такие как дата или ключевые слова (до даты и т. д.)
void writeInFile()
{
userTimeline = new UserTimeline.Builder()
.userId(userID)
.includeRetweets(false)
.maxItemsPerRequest(200)
.build();
userTimeline.next(null, callback);
}
Callback<TimelineResult<Tweet>> callback = new Callback<TimelineResult<Tweet>>()
{
@Override
public void success(Result<TimelineResult<Tweet>> searchResult)
{
List<Tweet> tweets = searchResult.data.items;
for (Tweet tweet : tweets)
{
String str = tweet.text; //Here is the body
maxId = tweet.id;
Log.v(TAG,str);
}
if (searchResult.data.items.size() == 100) {
userTimeline.previous(maxId, callback);
}
else {
}
}
@Override
public void failure(TwitterException error)
{
Log.e(TAG,"Error");
}
};
Заранее спасибо.
Вы получаете все необходимые данные в
public void success(Result<TimelineResult<Tweet>> searchResult)
Перезвоните.
У вас есть список твитов от
searchResult.data.items;
а затем вы можете выбрать только те данные, которые вам нужны. В классе Твитнуть содержится много данных, которые вы можете использовать. Вот документы.
Если вы сравните его с Ответ API JSON, вы увидите, что у вас такая же информация.
Все, что вам нужно сделать, это получить данные из вашего объекта Tweet и отфильтровать их. Например, получим только твиты, созданные за последние 6 часов:
List<Tweet> tweets = searchResult.data.items;
List<Tweet> filteredTweets = new ArrayList<>();
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
cal.add(Calendar.HOUR_OF_DAY, -6);
Date sixHoursBefore = cal.getTime();
for (Tweet tweet : tweets)
{
Date tweetCreatedAtDate = null;
try {
tweetCreatedAtDate = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy").parse(tweet.createdAt);
if (tweetCreatedAtDate.after(sixHoursBefore)) {
filteredTweets.add(tweet);
}
} catch (ParseException e) {
e.printStackTrace();
}
}
Там twitter возвращает createdAt в формате Wed Aug 27 13:08:45 +0000 2008, что не очень удобно, но мы можем его разобрать.
Я бы порекомендовал вам немного реорганизовать его, вынести календарь и логику синтаксического анализа в отдельные функции, но вы можете понять идею из приведенного выше кода.