2013-03-27 93 views
0

我的應用程序不按預期工作,它在運行程序時顯示0.00。如何格式化我的代碼或添加更多的元素,以便它實際訪問網頁?我在Manifest文件中有訪問代碼,我的strings.xml和activity_main.xml似乎沒有任何問題。我主要只是困惑我是否真正理解什麼組件放在應用程序訪問互聯網的Java文件。根據用戶輸入的股票代碼顯示股票的應用程序

我的代碼片段:

public class MainActivity extends Activity { 
    private static final String DEBUG_TAG = "HttpExample"; 
    private EditText urlText; 
    private TextView textView; 
    private Editable stock_symbol; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     urlText = (EditText) findViewById(R.id.et1); 
     stock_symbol = urlText.getText(); 
     textView = (TextView) findViewById(R.id.tv1); 
    } 
    public void myClickHandler(View view) { 
     // Gets URL from UI's text field. 
     String stringUrl = urlText.getText().toString(); 
     ConnectivityManager connMgr = (ConnectivityManager) 
      getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); 
     if (networkInfo != null && networkInfo.isConnected()) { 
      new DownloadWebpageText().execute(stringUrl); 
     } else { 
      textView.setText("No network connection available."); 
     } 
    } 

    /*Uses AsyncTask to create a task away from the main UI thread. This task takes a 
     * URL string and uses it to create an HttpUrlConnection. Once the connection 
     * has been established, the AsyncTask downloads the contents of the webpage as 
     * an InputStream. Finally, the InputStream is converted into a string, which is 
     * displayed in the UI by the AsyncTask's onPostExecute method.*/ 
    private class DownloadWebpageText extends AsyncTask <String, Void, String>{ 
     @Override 
     protected String doInBackground(String... urls) { 
      // params comes from the execute() call: params[0] is the url. 
      try { 
       return downloadUrl(urls[0]); 
      } catch (IOException e) { 
       return "Unable to retrieve web page. URL may be invalid."; 
      } 
     } 
     @Override 
     protected void onPostExecute(String result) { 
      String symbol = result.substring(result.indexOf('>') + 1, result.lastIndexOf('<')); 
      textView.setText(symbol); 
     } 
    // Given a URL, establishes an HttpUrlConnection and retrieves 
    // the web page content as a InputStream, which it returns as 
    // a string. 
    private String downloadUrl(String myurl) throws IOException { 
     InputStream is = null; 
     // Only display the first 500 characters of the retrieved web page content. 
     int len = 500; 
     try { 
      URL url = new URL("http://finance.yahoo.com/d/quotes.csv?s=" + stock_symbol + "&f=k1"); 
      HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
      conn.setReadTimeout(10000 /* milliseconds */); 
      conn.setConnectTimeout(15000 /* milliseconds */); 
      conn.setRequestMethod("GET"); 
      conn.setDoInput(true); 
      // Starts the query 
      conn.connect(); 
      int response = conn.getResponseCode(); 
      Log.d(DEBUG_TAG, "The response is: " + response); 
      is = conn.getInputStream(); 

      // Convert the InputStream into a string 
      String contentAsString = readIt(is, len); 
      return contentAsString; 

     // Confirms InputStream is closed after the app is finished using it. 
     } finally { 
      if (is != null) { 
       is.close(); 
      } 
     } 
    } 
    // Reads an InputStream and converts it to a String. 
    public String readIt(InputStream stream, int len) throws IOException, UnsupportedEncodingException { 
     Reader reader = null; 
     reader = new InputStreamReader(stream, "UTF-8");   
     char[] buffer = new char[len]; 
     reader.read(buffer); 
     return new String(buffer); 
    } 
    } 
} 

回答

0
public String readIt(InputStream stream, int len) throws IOException, UnsupportedEncodingException { 
     Reader reader = null; 
     reader = new InputStreamReader(stream, "UTF-8");   
     char[] buffer = new char[len]; 
     reader.read(buffer); 
     return new String(buffer); 
    } 

讀取只是len字節的輸入流。

使用Apache Commons IO庫InputStream的轉換爲直接一個字符串:

public String readIt(InputStream stream, int len) throws IOException, UnsupportedEncodingException { 
    return IOUtils.toString(stream, "UTF-8"); 
}