2013-05-02 100 views
0

我有這種形式的一個按鈕時提交我檢索雅虎財經API庫存信息,並用它來顯示到3個textviewsretriving股票報價與雅虎財經

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

和我的按鈕事件處理程序是

  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 =新的網址...,(即使是通過瀏覽器完成的裸HTTP請求,並返回信息我需要)

和我的清單條目看起來像

<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)

所以任何人都知道在哪裏我去錯了

+0

你在UI線程上做IO的東西嗎?你的代碼不完整。這是第一個猜測。 – 2013-05-02 13:19:45

+0

重複:http://stackoverflow.com/questions/6343166/android-os-networkonmainthreadexception – laalto 2013-05-02 13:26:38

+0

@大衛即時只是顯示在3 textviews,這是嵌入在一個單一的活動,我是一個全新的android,隊友UI線程?它來自火星:( – 2013-05-02 13:27:45

回答

1

這是你的logcat中的關鍵錯誤消息 - > android.os.NetworkOnMainThreadException。您應該將網絡訪問權移動到後臺線程。您可以使用IntentService,AsynchTask,Handler等來完成此操作。

查看http://developer.android.com/training/articles/perf-anr.html瞭解更多關於在獨立線程上執行網絡操作的重要性的更多信息。