how to get twitter trending topics on button click android - twitter4j?

你。 提交于 2019-12-11 17:52:08

问题


I've been studying android for a small period of time, and i'm trying to put some twitter functions in to my apps.

What i'm trying to do is get the twitter trending topics and put it on a String, and then display them on a textview. Is it possible? I found almost nothing on the internet, so hope you can help me.

`

 @Override
        protected void onCreate(Bundle savedInstanceState)
       {
         super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_trending);


    getTrendingButton = (Button) findViewById(R.id.gettrendingbutton);
    trendingList = (TextView) findViewById(R.id.trendinglist);



    cb = new ConfigurationBuilder();
    cb.setApplicationOnlyAuthEnabled(false);
    cb.setOAuthConsumerKey("key")
            .setOAuthConsumerSecret("key")
            .setOAuthAccessToken("key")
            .setOAuthAccessTokenSecret("key");

    twitterFactory = new TwitterFactory(cb.build());
    twitter = twitterFactory.getInstance();


}

@Override
protected void onStart()
{
    super.onStart();

    getTrendingButton.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View view)
        {
            String trendsString = " ";
            Trends trends;
            try {
                trends = twitter.getPlaceTrends(1);
                int count = 0;
                for (Trend trend : trends.getTrends()) {
                    if (count < 10)
                    {
                        trendsString = trend.getName().toString() + "\n";
                    }
                    trendingList.setText(trendsString);
                }
            } catch (TwitterException e) {
                e.printStackTrace();
            }

        }
    });


}`

and here the analyze stacktrace

android.os.NetworkOnMainThreadException at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1448) at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:102) at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:90) at java.net.InetAddress.getAllByName(InetAddress.java:787) at com.android.okhttp.Dns$1.lookup(Dns.java:39) at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:200) at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:148) at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:90) at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:190) at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:142) at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:104) at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:392) at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:325) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:489) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:435) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:566) at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getResponseCode(DelegatingHttpsURLConnection.java:105) at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getResponseCode(Unknown Source:0) at twitter4j.HttpResponseImpl.(HttpResponseImpl.java:35) at twitter4j.HttpClientImpl.handleRequest(HttpClientImpl.java:149) at twitter4j.HttpClientBase.request(HttpClientBase.java:57) at twitter4j.HttpClientBase.get(HttpClientBase.java:75) at twitter4j.TwitterImpl.get(TwitterImpl.java:2066) at twitter4j.TwitterImpl.getPlaceTrends(TwitterImpl.java:1912) at gusmappdev.myapp.TrendingActivity$1.onClick(TrendingActivity.java:77) at android.view.View.performClick(View.java:6897) at android.widget.TextView.performClick(TextView.java:12693) at android.view.View$PerformClick.run(View.java:26100) at android.os.Handler.handleCallback(Handler.java:789) at android.os.Handler.dispatchMessage(Handler.java:98) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6942) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)

Hope you guys can help me :) Thanks


回答1:


You have to do the network access in another thread. It is not allowed to do network calls in the main application thread. That's why you get a NetworkOnMainThreadException.

Here's a example how this can be solved: How do I fix android.os.NetworkOnMainThreadException?



来源:https://stackoverflow.com/questions/54308374/how-to-get-twitter-trending-topics-on-button-click-android-twitter4j

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!