Android应用程序的Java技术

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. privateArrayList<Stock>fetchStockData(Stock[]oldStocks)
  2. throwsClientProtocolException,IOException{
  3. StringBuildersb=newStringBuilder();
  4. for(Stockstock:oldStocks){
  5. sb.append(stock.getSymbol());
  6. sb.append('+');
  7. }
  8. sb.deleteCharAt(sb.length()-1);
  9. StringurlStr=
  10. "http://finance.yahoo.com/d/quotes.csv?f=sb2n&s="+
  11. sb.toString();
  12. HttpClientclient=newDefaultHttpClient();
  13. HttpGetrequest=newHttpGet(urlStr.toString());
  14. HttpResponseresponse=client.execute(request);
  15. BufferedReaderreader=newBufferedReader(
  16. newInputStreamReader(response.getEntity().getContent()));
  17. Stringline=reader.readLine();
  18. inti=0;
  19. ArrayList<Stock>newnewStocks=newArrayList<Stock>(oldStocks.length);
  20. while(line!=null){
  21. String[]values=line.split(",");
  22. Stockstock=newStock(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. returnnewStocks;
  30. }

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值