Публикация последнего твита с библиотекой twitter4j - где именно AsyncTask должен быть реализован? - PullRequest
0 голосов
/ 13 сентября 2018

Мой код прост: получение последнего твита с моей домашней страницы и публикация в поле Textview в моем приложении.

 public void lastTwitterpost() throws TwitterException
    {
        webView=(TextView) findViewById(R.id.webview);

        ConfigurationBuilder cf = new ConfigurationBuilder();
        cf.setDebugEnabled(true)
                .setOAuthConsumerKey("YYOkYp9G85lFxfXZPQAWcjAmX")
                .setOAuthConsumerSecret("TLZrCAgeiuCbN6WOoUzO6e0hfWySA01PEOK1KPEH6yB8kxEYSz ")
                .setOAuthAccessToken("4188976763-zVUUUMwEKvBD6J9mE3tiscaKQD85vWRkIyPdqBl")
                .setOAuthAccessTokenSecret("K1neDCJq9shWhBxxU6otD4PCU4HJObd8lch3X4XsRq5ew ");

        TwitterFactory tf = new TwitterFactory(cf.build());
        twitter4j.Twitter twitter = tf.getInstance();



            Log.d(TAG, "main: tweets messages:");
            int totalTweets = 1 ;// no of tweets to be fetched
            Paging paging = new Paging(1, totalTweets);
            List tweets = twitter.getHomeTimeline(paging);

            webView.setText(tweets.toString());
}

Но я получаю следующее сообщение об ошибке:

FATAL EXCEPTION: main  Process: com.example.android.bluesky, PID: 8320
                      java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.android.bluesky/com.example.android.bluesky.Search.SearchActivity}: android.os.NetworkOnMainThreadException
                          at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2406)
                          at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2466)
                          at android.app.ActivityThread.access$1200(ActivityThread.java:152)
                          at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1341)

Как я могу справиться с этим?

1 Ответ

0 голосов
/ 13 сентября 2018

Вы должны использовать AsyncTask или даже ее библиотеку, но, поскольку вы новичок, я предложу вам асинхронную задачу на данный момент. я предоставляю решение, но вы должны узнать, как работает AsyncTask

 public class FetchData extends AsyncTask<Void,Void,List>{

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        // this will run first and you can perform any ui based task like showing progress bar here
        webView=(TextView) findViewById(R.id.webview);

    }

    @Override
    protected List doInBackground(Void... voids) {

        // this will run after pro execute and it will run  on another thread and you can not perform any ui based task here


        ConfigurationBuilder cf = new ConfigurationBuilder();
        cf.setDebugEnabled(true)
                .setOAuthConsumerKey("YYOkYp9G85lFxfXZPQAWcjAmX")
                .setOAuthConsumerSecret("TLZrCAgeiuCbN6WOoUzO6e0hfWySA01PEOK1KPEH6yB8kxEYSz ")
                .setOAuthAccessToken("4188976763-zVUUUMwEKvBD6J9mE3tiscaKQD85vWRkIyPdqBl")
                .setOAuthAccessTokenSecret("K1neDCJq9shWhBxxU6otD4PCU4HJObd8lch3X4XsRq5ew ");

        TwitterFactory tf = new TwitterFactory(cf.build());
        twitter4j.Twitter twitter = tf.getInstance();



        Log.d(TAG, "main: tweets messages:");
        int totalTweets = 1 ;// no of tweets to be fetched
        Paging paging = new Paging(1, totalTweets);
        List tweets = twitter.getHomeTimeline(paging);


        return tweets;
    }

    @Override
    protected void onPostExecute(List result) {
        super.onPostExecute(result);

        // this will run at last after doInBackground and you can perform any ui based task like showing progress bar here

        webView.setText(result.toString());
    }
}

теперь замените lastTwitterpost() вызов на new FetchData().execute()

...