Хорошо, поэтому я решил перейти на использование twitter4j вместо модернизации, поскольку это намного проще и быстрее. Подробнее об этом go на этом сайте: http://twitter4j.org/
Теперь я объясню, как я реализовал функцию поиска в Твиттере для моего варианта использования.
Android Манифест
Добавить эти разрешения
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.INTERNET" />
build.gradle (Модуль: приложение)
Добавить это
implementation files('libs/twitter4j-core-4.0.7.jar')
Далее необходимо создать JobIntentService, чтобы запускать сетевые функции, которые требуются для twitter4j, из основного потока. Это видео, которое я использовал, чтобы лучше понять эту концепцию: https://www.youtube.com/watch?v=B4gFbWnNpac&t=567s
TweetJobIntentService. java
Прежде чем продолжить, зарегистрируйтесь ваше приложение и получите его личные учетные данные OAuth в портале Twitter для разработчиков. Заполните эти учетные данные там, где я указал в примере кода ниже.
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.core.app.JobIntentService;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import java.util.ArrayList;
import java.util.List;
import twitter4j.Query;
import twitter4j.QueryResult;
import twitter4j.Status;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
import twitter4j.auth.AccessToken;
public class TweetJobIntentService extends JobIntentService {
private static final String TAG = "TweetJobIntentService";
static void enqueueWork(Context context, Intent work) {
enqueueWork(context, TweetJobIntentService.class, 123, work);
}
@Override
public void onCreate() {
super.onCreate();
Log.d(TAG, "onCreate: ");
}
@Override
protected void onHandleWork(@NonNull Intent intent) {
Log.d(TAG, "onHandleWork: ");
List tweets = new ArrayList();
Twitter twitter = new TwitterFactory().getInstance();
twitter.setOAuthConsumer("Your_OAuthConsumerKey", "Your_AuthConsumerSecret");
AccessToken accessToken = new AccessToken("Your_OAuthAccessToken", "Your_OAuthAccessTokenSecret");
twitter.setOAuthAccessToken(accessToken);
Query query = new Query(Your_search_Keyword);
try {
QueryResult result = twitter.search(query);
for (Status status : result.getTweets()) {
Log.d(TAG, status.getText());
}
if (isStopped()) return;
} catch (TwitterException e) {
e.printStackTrace();
}
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDeastroy");
}
@Override
public boolean onStopCurrentWork() {
Log.d(TAG, "onStopCurrentWork");
return super.onStopCurrentWork();
}
}
Ваши полученные твиты должны быть напечатаны в logcat.
Ваше основное занятие / фрагмент
Здесь вы инициируете / вызываете сервис JobIntentService. Для меня мой сервис инициирован фрагментом в методе onViewCreated
. Ваш может быть инициирован после нажатия кнопки или что вы будете sh.
Intent jobserviceIntent = new Intent(getActivity(), TweetJobIntentService.class);
TweetJobIntentService.enqueueWork(getActivity(), jobserviceIntent);