首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用雅虎财经检索股票行情

用雅虎财经检索股票行情
EN

Stack Overflow用户
提问于 2013-05-02 21:17:36
回答 1查看 1.9K关注 0票数 0

我有一个提交时,我从雅虎金融api检索股票信息,并使用它来显示在三个文本视图上的按钮

我使用的url是http://download.finance.yahoo.com/d/quotes.csv?s=goog&f=sl1p2

我的按钮事件处理程序是

代码语言:javascript
复制
          URL url;

            try {
                url = new URL("http://download.finance.yahoo.com/d/quotes.csv?s=goog&f=sl1p2");


                InputStream stream = url.openStream();
                BufferedInputStream bis = new BufferedInputStream(stream);
                ByteArrayBuffer bab = new ByteArrayBuffer(50);

                int current = 0;
                   while((current = bis.read()) != -1){
                    bab.append((byte) current);
                   }
                String stockTxt = new String(bab.toByteArray());
                String[] tokens = stockTxt.split(",");

                String stockSymbol = tokens[0];
                String stockPrice = tokens[1];
                String stockChange = tokens[2];

                String fstockSymbol = stockSymbol.substring(1, stockSymbol.length() -1);
                String fstockChange = stockChange.substring(1, stockChange.length()-3);

                symbolOut.setText(fstockSymbol);
                priceOut.setText(stockPrice);
                changeOut.setText(fstockChange);
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

所以我注意到第一行似乎没有问题,即url = new URL... (即使是通过浏览器完成的纯http请求,也会返回我需要的信息)

我的清单条目看起来像

代码语言:javascript
复制
<uses-permission android:name="android.permission.INTERNET"></uses-permission>

下面是logcat输出

05-02 18:36:32.804: D/AndroidRuntime(902): Shutting down VM 05-02 18:36:32.804: W/dalvikvm(902): threadid=1: thread exiting with uncaught exception (group=0x409c01f8) 05-02 18:36:33.113: E/AndroidRuntime(902): FATAL EXCEPTION: main 05-02 18:36:33.113: E/AndroidRuntime(902): android.os.NetworkOnMainThreadException 05-02 18:36:33.113: E/AndroidRuntime(902): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099) 05-02 18:36:33.113: E/AndroidRuntime(902): at java.net.InetAddress.lookupHostByName(InetAddress.java:391) 05-02 18:36:33.113: E/AndroidRuntime(902): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:242) 05-02 18:36:33.113: E/AndroidRuntime(902): at java.net.InetAddress.getAllByName(InetAddress.java:220) 05-02 18:36:33.113: E/AndroidRuntime(902): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:71)

所以任何人都知道我错在哪里。

EN

回答 1

Stack Overflow用户

发布于 2013-05-02 21:25:14

这是您的LogCat消息--> android.os.NetworkOnMainThreadException中的关键错误。您应该将您的网络访问移动到后台线程。您可以使用IntentService、AsynchTask、Handler等来完成此任务。

有关在单独线程上执行网络操作为什么很重要的更多信息,请查看http://developer.android.com/training/articles/perf-anr.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16339045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档