如何在按钮点击 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 热门话题?的主要内容,如果未能解决你的问题,请参考以下文章
从结构中删除后,如何将 twitter 集成到 android 中以进行 twitter 登录?
最佳实践:包括“使用 Twitter 登录”按钮 (Android)
使用twitter4j库的Twitter Android登录错误