Android应用程序的Java技术

来源:互联网 发布:淘宝女人 编辑:程序博客网 时间:2024/04/28 11:45

Android应用程序一个最常见的任务就是检索数据或通过网络将数据发送到远程服务器。这一操作的结果通常是一些您想要展示给用户的新数据。这意味着您需要修改用户界面。大多数开发人员知道您将不会执行一个潜在的长期运行任务,例如,在主UI线程上通过网络访问数据(特别使用一个网络连接非常慢的手机)。冻结您的应用程序直至长期运行任务完成。事实上,如果这个任务超过5秒,Android操作系统将出现臭名昭著的Application Not Responding对话框。

Application Not Responding 对话框 
图1.Android臭名昭著的Application Not Responding对话框

您不可能知道用户网络连接能有多慢。为了避免冒险,您必须在不同的线程上执行任务,或者至少不在主UI线程上执行。许多Android应用程序,但不是全部,需要处理多线程,由此引起并发。应用程序经常需要本地保存数据,Android数据库是一个很好的选择。这三个场景(不同线程,并发和本地保存数据)在Java环境中有许多标准方法可以用来处理。然而,正如您将要看到的,Android提供不同的选择。让我们逐个看看,看看其优点和缺点。

Android网络

通过网络使用Java编程进行调用是简单的,我们熟悉的java.net包含几个执行此操作的类。这些类大多数在Android中都可用,事实上,您可以使用像java.net.URL和java.net.URLConnection这样的类,就像您在其他Java应用程序中那样。然而,Android包括pacheHttpClient库,这是在Android上连接网络的首选方法。即使您使用常用Java类,Android实现仍然使用HttpClient。清单1显示了一个使用这个必不可少的库的示例。

清单1.在Android上使用Http Client库

  1. private ArrayList<Stock> fetchStockData(Stock[] oldStocks)   
  2.     throws ClientProtocolException, IOException{  
  3.     StringBuilder sb = new StringBuilder();  
  4.     for (Stock stock : oldStocks){  
  5.         sb.append(stock.getSymbol());  
  6.         sb.append('+');  
  7.     }  
  8.     sb.deleteCharAt(sb.length() - 1);  
  9.     String urlStr =   
  10.         "http://finance.yahoo.com/d/quotes.csv?f=sb2n&s=" +   
  11.                 sb.toString();  
  12.     HttpClient client = new DefaultHttpClient();  
  13.     HttpGet request = new HttpGet(urlStr.toString());  
  14.     HttpResponse response = client.execute(request);  
  15.     BufferedReader reader = new BufferedReader(  
  16.             new InputStreamReader(response.getEntity().getContent()));  
  17.     String line = reader.readLine();  
  18.     int i = 0;  
  19.     ArrayList<Stock> newnewStocks = new ArrayList<Stock>(oldStocks.length);  
  20.     while (line != null){  
  21.         String[] values = line.split(",");  
  22.         Stock stock = new Stock(oldStocks[i], oldStocks[i].getId());  
  23.         stock.setCurrentPrice(Double.parseDouble(values[1]));  
  24.         stock.setName(values[2]);  
  25.         newStocks.add(stock);  
  26.         line = reader.readLine();  
  27.         i++;  
  28.     }  
  29.     return newStocks;  

在这段代码中有一组Stock对象。这是基本的数据结构对象,保存用户拥有股票信息(比如,代号、价格等)以及更多的个人信息(比如,用户付了多少钱)。您可以使用HttpClient类从Yahoo Finance检索动态数据(例如,这支股票目前的价格)。HttpClient包含一个HttpUriRequest,在本例中,您可以使用HttpGet,这是HttpUriRequest的一个子类。类似地,当您需要向远程服务器发送数据时,可以使用HttpPost类,当您从客户端得到HttpResponse时,您能接触到响应的潜在InputStream、对其进行缓冲、解析来获取股票信息。

现在,您看到了如何通过网络检索数据、如何用这个数据来通过使用多线程智能地更新Android UI。

原创粉丝点击