如何在按钮点击 android - twitter4j 上获取 twitter 热门话题?

Posted

技术标签:

【中文标题】如何在按钮点击 android - twitter4j 上获取 twitter 热门话题?【英文标题】:how to get twitter trending topics on button click android - twitter4j? 【发布时间】:2019-06-15 22:18:35 【问题描述】:

我研究 android 已经有一段时间了,我正在尝试将一些 twitter 功能放入我的应用程序中。

我想要做的是获取推特热门话题并将其放在一个字符串上,然后将它们显示在一个文本视图上。可能吗?我在互联网上几乎没有找到任何东西,所以希望你能帮助我。

`

 @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();
            

        
    );


`

这里是分析堆栈跟踪

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

希望你们能帮助我:) 谢谢

【问题讨论】:

【参考方案1】:

您必须在另一个线程中进行网络访问。不允许在主应用程序线程中进行网络调用。这就是为什么你会收到NetworkOnMainThreadException

这是一个如何解决此问题的示例:How do I fix android.os.NetworkOnMainThreadException?

【讨论】:

【参考方案2】:

有一种方法可以将getPlaceTrends() 方法与AsyncTwitter 实例一起使用。但是在这种情况下,方法是 void,我不确定如何存储结果。

【讨论】:

以上是关于如何在按钮点击 android - twitter4j 上获取 twitter 热门话题?的主要内容,如果未能解决你的问题,请参考以下文章

android中的点击功能[关闭]

从结构中删除后,如何将 twitter 集成到 android 中以进行 twitter 登录?

最佳实践:包括“使用 Twitter 登录”按钮 (Android)

使用twitter4j库的Twitter Android登录错误

如何通过 twitter 的 Fabric API (Android) 获取用户数据

如何在 phonegap 中添加社交分享按钮