﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-Chasing an mobile web vision</title><link>http://www.blogjava.net/Ferrari4000/</link><description>闯荡在移动互联网的世界中</description><language>zh-cn</language><lastBuildDate>Tue, 17 Mar 2026 03:44:52 GMT</lastBuildDate><pubDate>Tue, 17 Mar 2026 03:44:52 GMT</pubDate><ttl>60</ttl><item><title>移动互联网时代--Android上的一个例子</title><link>http://www.blogjava.net/Ferrari4000/archive/2009/03/14/259729.html</link><dc:creator>勤劳的蜜蜂</dc:creator><author>勤劳的蜜蜂</author><pubDate>Sat, 14 Mar 2009 08:16:00 GMT</pubDate><guid>http://www.blogjava.net/Ferrari4000/archive/2009/03/14/259729.html</guid><wfw:comment>http://www.blogjava.net/Ferrari4000/comments/259729.html</wfw:comment><comments>http://www.blogjava.net/Ferrari4000/archive/2009/03/14/259729.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/Ferrari4000/comments/commentRss/259729.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Ferrari4000/services/trackbacks/259729.html</trackback:ping><description><![CDATA[<p>我们来演示一个获取联系人，并用网页展现出来的简单例子。</p>
<p>&nbsp;首先，我们在eclipse环境中创建一个Android project，我们的Activity名称是com.example.RIAExample，并且修改界面的layout文件如下：<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="utf-8"</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">LinearLayout&nbsp;</span><span style="color: #ff0000">xmlns:android</span><span style="color: #0000ff">="http://schemas.android.com/apk/res/android"</span><span style="color: #ff0000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;android:orientation</span><span style="color: #0000ff">="vertical"</span><span style="color: #ff0000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;android:layout_width</span><span style="color: #0000ff">="fill_parent"</span><span style="color: #ff0000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;android:layout_height</span><span style="color: #0000ff">="fill_parent"</span><span style="color: #ff0000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">WebView&nbsp;</span><span style="color: #ff0000">android:id</span><span style="color: #0000ff">="@+id/web"</span><span style="color: #ff0000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;android:layout_width</span><span style="color: #0000ff">="fill_parent"</span><span style="color: #ff0000">&nbsp;android:layout_height</span><span style="color: #0000ff">="fill_parent"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">WebView</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">LinearLayout</span><span style="color: #0000ff">&gt;</span></div>
<p>可以看到，界面中仅仅包含一个WebView控件。</p>
<p>&nbsp;接下来，创建一个简单的java类来描述一个联系人的信息，它包含联系人姓名和号码。</p>
<p>&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.example;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.Vector;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;android.app.Activity;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;android.os.Bundle;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;android.webkit.WebView;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img id="Codehighlighter1_176_1691_Open_Image" onclick="this.style.display='none'; Codehighlighter1_176_1691_Open_Text.style.display='none'; Codehighlighter1_176_1691_Closed_Image.style.display='inline'; Codehighlighter1_176_1691_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_176_1691_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_176_1691_Closed_Text.style.display='none'; Codehighlighter1_176_1691_Open_Image.style.display='inline'; Codehighlighter1_176_1691_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;RIAExample&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;Activity&nbsp;</span><span id="Codehighlighter1_176_1691_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_176_1691_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;WebView&nbsp;web;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">模拟号码簿</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Vector</span><span style="color: #000000">&lt;</span><span style="color: #000000">Person</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;phonebook&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Vector</span><span style="color: #000000">&lt;</span><span style="color: #000000">Person</span><span style="color: #000000">&gt;</span><span style="color: #000000">();<br />
<img id="Codehighlighter1_275_323_Open_Image" onclick="this.style.display='none'; Codehighlighter1_275_323_Open_Text.style.display='none'; Codehighlighter1_275_323_Closed_Image.style.display='inline'; Codehighlighter1_275_323_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_275_323_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_275_323_Closed_Text.style.display='none'; Codehighlighter1_275_323_Open_Image.style.display='inline'; Codehighlighter1_275_323_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_275_323_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**&nbsp;*/</span><span id="Codehighlighter1_275_323_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000">&nbsp;Called&nbsp;when&nbsp;the&nbsp;activity&nbsp;is&nbsp;first&nbsp;created.&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
<img id="Codehighlighter1_391_859_Open_Image" onclick="this.style.display='none'; Codehighlighter1_391_859_Open_Text.style.display='none'; Codehighlighter1_391_859_Closed_Image.style.display='inline'; Codehighlighter1_391_859_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_391_859_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_391_859_Closed_Text.style.display='none'; Codehighlighter1_391_859_Open_Image.style.display='inline'; Codehighlighter1_391_859_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;onCreate(Bundle&nbsp;savedInstanceState)&nbsp;</span><span id="Codehighlighter1_391_859_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_391_859_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">super</span><span style="color: #000000">.onCreate(savedInstanceState);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setContentView(R.layout.main);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.initContacts();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;web&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(WebView)</span><span style="color: #0000ff">this</span><span style="color: #000000">.findViewById(R.id.web);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;web.getSettings().setJavaScriptEnabled(</span><span style="color: #0000ff">true</span><span style="color: #000000">);</span><span style="color: #008000">//</span><span style="color: #008000">开启javascript设置，否则WebView不执行js脚本</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;web.addJavascriptInterface(</span><span style="color: #0000ff">this</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">phonebook</span><span style="color: #000000">"</span><span style="color: #000000">);</span><span style="color: #008000">//</span><span style="color: #008000">把RIAExample的一个实例添加到js的全局对象window中，<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">这样就可以使用window.phonebook来调用它的方法</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;web.loadUrl(</span><span style="color: #000000">"</span><span style="color: #000000">file:///android_asset/phonebook.html</span><span style="color: #000000">"</span><span style="color: #000000">);</span><span style="color: #008000">//</span><span style="color: #008000">加载网页</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_870_997_Open_Image" onclick="this.style.display='none'; Codehighlighter1_870_997_Open_Text.style.display='none'; Codehighlighter1_870_997_Closed_Image.style.display='inline'; Codehighlighter1_870_997_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_870_997_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_870_997_Closed_Text.style.display='none'; Codehighlighter1_870_997_Open_Image.style.display='inline'; Codehighlighter1_870_997_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_870_997_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**&nbsp;*/</span><span id="Codehighlighter1_870_997_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;该方法将在js脚本中，通过window.phonebook.getContacts()进行调用<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;返回的JavaArrayJSWrapper对象可以使得在js中访问Java数组<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@return</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_1042_1232_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1042_1232_Open_Text.style.display='none'; Codehighlighter1_1042_1232_Closed_Image.style.display='inline'; Codehighlighter1_1042_1232_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1042_1232_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1042_1232_Closed_Text.style.display='none'; Codehighlighter1_1042_1232_Open_Image.style.display='inline'; Codehighlighter1_1042_1232_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;JavaArrayJSWrapper&nbsp;getContacts()</span><span id="Codehighlighter1_1042_1232_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_1042_1232_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">fetching&nbsp;contacts&nbsp;data</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Person[]&nbsp;a&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Person[</span><span style="color: #0000ff">this</span><span style="color: #000000">.phonebook.size()];<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.phonebook.toArray(a);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;JavaArrayJSWrapper(a);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_1243_1269_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1243_1269_Open_Text.style.display='none'; Codehighlighter1_1243_1269_Closed_Image.style.display='inline'; Codehighlighter1_1243_1269_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1243_1269_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1243_1269_Closed_Text.style.display='none'; Codehighlighter1_1243_1269_Open_Image.style.display='inline'; Codehighlighter1_1243_1269_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1243_1269_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**&nbsp;*/</span><span id="Codehighlighter1_1243_1269_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;初始化电话号码簿<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_1301_1522_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1301_1522_Open_Text.style.display='none'; Codehighlighter1_1301_1522_Closed_Image.style.display='inline'; Codehighlighter1_1301_1522_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1301_1522_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1301_1522_Closed_Text.style.display='none'; Codehighlighter1_1301_1522_Open_Image.style.display='inline'; Codehighlighter1_1301_1522_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;initContacts()</span><span id="Codehighlighter1_1301_1522_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_1301_1522_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Person&nbsp;p&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Person();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.name&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Perter</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.phone_number&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">8888888</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;phonebook.add(p);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Person();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.name&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Jack</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.phone_number&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">777777</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;phonebook.add(p);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_1533_1607_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1533_1607_Open_Text.style.display='none'; Codehighlighter1_1533_1607_Closed_Image.style.display='inline'; Codehighlighter1_1533_1607_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1533_1607_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1533_1607_Closed_Text.style.display='none'; Codehighlighter1_1533_1607_Open_Image.style.display='inline'; Codehighlighter1_1533_1607_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1533_1607_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**&nbsp;*/</span><span id="Codehighlighter1_1533_1607_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;通过window.phonebook.debugout来输出js调试信息。<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;info<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_1646_1689_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1646_1689_Open_Text.style.display='none'; Codehighlighter1_1646_1689_Closed_Image.style.display='inline'; Codehighlighter1_1646_1689_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1646_1689_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1646_1689_Closed_Text.style.display='none'; Codehighlighter1_1646_1689_Open_Image.style.display='inline'; Codehighlighter1_1646_1689_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;debugout(String&nbsp;info)</span><span id="Codehighlighter1_1646_1689_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_1646_1689_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(info);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>
<br />
下面是html文件，它非常简单。<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img id="Codehighlighter1_72_161_Open_Image" onclick="this.style.display='none'; Codehighlighter1_72_161_Open_Text.style.display='none'; Codehighlighter1_72_161_Closed_Image.style.display='inline'; Codehighlighter1_72_161_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_72_161_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_72_161_Closed_Text.style.display='none'; Codehighlighter1_72_161_Open_Image.style.display='inline'; Codehighlighter1_72_161_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">script&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="text/javascript"</span><span style="color: #ff0000">&nbsp;src</span><span style="color: #0000ff">="fetchcontacts.js"</span><span style="color: #0000ff">/&gt;</span><span id="Codehighlighter1_72_161_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_72_161_Open_Text"><span style="color: #000000; background-color: #f5f5f5"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000; background-color: #f5f5f5">&lt;/</span><span style="color: #000000; background-color: #f5f5f5">head</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000; background-color: #f5f5f5">&lt;</span><span style="color: #000000; background-color: #f5f5f5">body</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">&lt;</span><span style="color: #000000; background-color: #f5f5f5">div&nbsp;id&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">contacts</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">&lt;</span><span style="color: #000000; background-color: #f5f5f5">p</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">this</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;is&nbsp;a&nbsp;demo&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">&lt;/</span><span style="color: #000000; background-color: #f5f5f5">p</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">&lt;/</span><span style="color: #000000; background-color: #f5f5f5">div</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000; background-color: #f5f5f5">&lt;/</span><span style="color: #000000; background-color: #f5f5f5">body</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000; background-color: #f5f5f5">&lt;/</span><span style="color: #000000; background-color: #f5f5f5">html</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span></div>
</span><br />
而主角就是我们的javascript脚本fetchcontacts.js<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_25_821_Open_Image" onclick="this.style.display='none'; Codehighlighter1_25_821_Open_Text.style.display='none'; Codehighlighter1_25_821_Closed_Image.style.display='inline'; Codehighlighter1_25_821_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_25_821_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_25_821_Closed_Text.style.display='none'; Codehighlighter1_25_821_Open_Image.style.display='inline'; Codehighlighter1_25_821_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #000000">window.onload</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">()</span><span id="Codehighlighter1_25_821_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_25_821_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;window.phonebook.debugout(</span><span style="color: #000000">"</span><span style="color: #000000">inside&nbsp;js&nbsp;onload</span><span style="color: #000000">"</span><span style="color: #000000">);</span><span style="color: #008000">//</span><span style="color: #008000">调用RIAExample.debugout</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;persons&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;window.phonebook.getContacts();</span><span style="color: #008000">//</span><span style="color: #008000">调用RIAExample.getContacts()</span><span style="color: #008000"><br />
<img id="Codehighlighter1_185_756_Open_Image" onclick="this.style.display='none'; Codehighlighter1_185_756_Open_Text.style.display='none'; Codehighlighter1_185_756_Closed_Image.style.display='inline'; Codehighlighter1_185_756_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_185_756_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_185_756_Closed_Text.style.display='none'; Codehighlighter1_185_756_Open_Image.style.display='inline'; Codehighlighter1_185_756_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(persons)</span><span id="Codehighlighter1_185_756_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_185_756_Open_Text"><span style="color: #000000">{</span><span style="color: #008000">//</span><span style="color: #008000">persons实际上是JavaArrayJSWrapper对象</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.phonebook.debugout(persons.length()&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;of&nbsp;contact&nbsp;entries&nbsp;are&nbsp;fetched</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;contactsE&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;document.getElementById(</span><span style="color: #000000">"</span><span style="color: #000000">contacts</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;<br />
<img id="Codehighlighter1_401_753_Open_Image" onclick="this.style.display='none'; Codehighlighter1_401_753_Open_Text.style.display='none'; Codehighlighter1_401_753_Closed_Image.style.display='inline'; Codehighlighter1_401_753_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_401_753_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_401_753_Closed_Text.style.display='none'; Codehighlighter1_401_753_Open_Image.style.display='inline'; Codehighlighter1_401_753_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">(i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;persons.length())</span><span id="Codehighlighter1_401_753_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_401_753_Open_Text"><span style="color: #000000">{</span><span style="color: #008000">//</span><span style="color: #008000">persons.length()调用JavaArrayJSWrapper.length()方法</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pnode&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;document.createElement(</span><span style="color: #000000">"</span><span style="color: #000000">p</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tnode&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;document.createTextNode(</span><span style="color: #000000">"</span><span style="color: #000000">name&nbsp;:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;persons.get(i).getName()&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;number&nbsp;:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;persons.get(i).getNumber());</span><span style="color: #008000">//</span><span style="color: #008000">persons.get(i)获得Person对象，然后在js里面直接调用getName()和getNumber()获取姓名和号码</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pnode.appendChild(tnode);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;contactsE.appendChild(pnode);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;</span><span style="color: #000000">++</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_761_817_Open_Image" onclick="this.style.display='none'; Codehighlighter1_761_817_Open_Text.style.display='none'; Codehighlighter1_761_817_Closed_Image.style.display='inline'; Codehighlighter1_761_817_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_761_817_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_761_817_Closed_Text.style.display='none'; Codehighlighter1_761_817_Open_Image.style.display='inline'; Codehighlighter1_761_817_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #0000ff">else</span><span id="Codehighlighter1_761_817_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_761_817_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.phonebook.debugout(</span><span style="color: #000000">"</span><span style="color: #000000">persons&nbsp;is&nbsp;undefined</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>
<p><br />
&nbsp;例子很简单，我加了注释希望有助大家理解，其他我就不深入解释了。<br />
我把例子的源代码放上来，你可以下来试一试。<br />
<br />
</p>
<p><a title="RIADemo" href="http://www.blogjava.net/Files/Ferrari4000/RIADemo.tar">RIADemo</a></p>
<p>这个例子说明通过WebView.addJavascriptInterface方法，我们可以扩展JavaScript的API，获取Android的数据。这样，JS的粉丝就可以使用Dojo，JQuery，Prototy等这些知名的js框架来搭建android应用程序来展现它们很酷很玄的效果！但是，目前addJavascriptInterface还不够灵活强大，为什么呢？敬请关注第四篇&#8220;what next?&#8221;<br />
<br />
<br />
</p>
 <img src ="http://www.blogjava.net/Ferrari4000/aggbug/259729.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Ferrari4000/" target="_blank">勤劳的蜜蜂</a> 2009-03-14 16:16 <a href="http://www.blogjava.net/Ferrari4000/archive/2009/03/14/259729.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>移动互联网时代--忽如一夜春风来，web花开各终端</title><link>http://www.blogjava.net/Ferrari4000/archive/2009/03/10/258930.html</link><dc:creator>勤劳的蜜蜂</dc:creator><author>勤劳的蜜蜂</author><pubDate>Tue, 10 Mar 2009 14:39:00 GMT</pubDate><guid>http://www.blogjava.net/Ferrari4000/archive/2009/03/10/258930.html</guid><wfw:comment>http://www.blogjava.net/Ferrari4000/comments/258930.html</wfw:comment><comments>http://www.blogjava.net/Ferrari4000/archive/2009/03/10/258930.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Ferrari4000/comments/commentRss/258930.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Ferrari4000/services/trackbacks/258930.html</trackback:ping><description><![CDATA[<div><span class="Apple-tab-span" style="white-space:pre">	</span>自从Apple在safari上使用webkit并移植到iphone后，webkit就仿佛是获得了选秀第一名似的，吸引了众多眼球。</div>
<div><span class="Apple-tab-span" style="white-space:pre">	</span>其实，我最早听说webkit是在iphone出来前一两年，当时有报道说Nokia正在采用webkit为它下一代的Symbian平台做一个引擎，而且还有专门的社区，但比较封闭，很难进入那个圈子，让人一点感觉没有。不过，至少说明Nokia很早就盯上这一块了。</div>
<div><span class="Apple-tab-span" style="white-space:pre">	</span>iphone发布后，Apple似乎就接管webkit了，从此，webkit社区就有了巨大变化。Apple把能开放的东西都放到了webkit社区里面，速度还相当的快（用Apple自己的话说，他们贡献了81%的力量，看看webkit社区的主力开发人员，有多少来自Apple！）现在，我们时不时的可以看到webkit的更新，比如对html5的跟进，css的特效等新功能！其中不得不重点提出的是2008年6月2日，webkit社区发布了高性能javascript引擎SquirrelFish！9月3日google chrome发布，采用了V8 javascript引擎，号称比SquirrelFish还快，两个礼拜后webkit就发布了SquirrelFish&#160;Extreme给予正面还击。巨头们牟足了劲争先把javascript引擎油门踩到底！我不想猜测他们卖力的真正原因，但是，我觉得随着移动终端能力加强，javascript大面积攻进终端已经指日可待了，iphone和android已经实现了。</div>
<div><span class="Apple-tab-span" style="white-space:pre">	</span>这期间，由于Apple的快速组合拳，Nokia经营的webkit专区很快就倒闭了。但他并没有放弃对webkit的投入，2008年1月28日Nokia宣布收购了Trolltech公司。现在Trolltech lab作为Nokia的代表仍然活跃在webkit社区之中。就前两天，他们还在http://planet.webkit.org/发布了一篇标题极其引人的博文&#8220;Creating a Google chat client in 15 minutes&#8221;，为QWebView做了一把广告，相信qt的粉丝肯定不会错过。而本月初发布的qt4.5中，明确指出qt加强了对webkit诸如SquirrelFish等新功能的整合。那么就让我们期待一下Nokia的新款机器吧。</div>
<div><span class="Apple-tab-span" style="white-space:pre">	</span>到此，我们已经看到Google, Apple, Nokia, Palm等移动终端的领头羊们所采取的行动，然而，不要忘记软件厂商！Adobe就是杰出的代表。作为RIA的强烈倡导者，他也选择把webkit整合到其AIR平台，你可以想象这个webkit+flash的威力有多强大！而Adobe发起的openscreen项目，更是表明了他要在RIA上争夺王位的野心！</div>
<div><span class="Apple-tab-span" style="white-space:pre">	</span>好了，不啰嗦那么多了，总之呢，webkit已经成为移动互联网这出大戏的主角了，回归到我在上一篇中提到的主题，让我们来研究一下android.webkit.WebView的功能，来看android上的RIA。</div>
<div><span class="Apple-tab-span" style="white-space:pre">	</span>敬请关注下一篇--使用WebView的小例子。</div>
<div><br />
</div>
<img src ="http://www.blogjava.net/Ferrari4000/aggbug/258930.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Ferrari4000/" target="_blank">勤劳的蜜蜂</a> 2009-03-10 22:39 <a href="http://www.blogjava.net/Ferrari4000/archive/2009/03/10/258930.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>移动互联网时代的终端--暂时遗忘OSGi，让我们去品味一杯android磨出的移动互联网咖啡吧</title><link>http://www.blogjava.net/Ferrari4000/archive/2009/03/09/258689.html</link><dc:creator>勤劳的蜜蜂</dc:creator><author>勤劳的蜜蜂</author><pubDate>Mon, 09 Mar 2009 14:53:00 GMT</pubDate><guid>http://www.blogjava.net/Ferrari4000/archive/2009/03/09/258689.html</guid><wfw:comment>http://www.blogjava.net/Ferrari4000/comments/258689.html</wfw:comment><comments>http://www.blogjava.net/Ferrari4000/archive/2009/03/09/258689.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/Ferrari4000/comments/commentRss/258689.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Ferrari4000/services/trackbacks/258689.html</trackback:ping><description><![CDATA[<div>1年多前，揣着在移动终端推广OSGi的梦想，我离开了原来的公司，来到了一个自认为更利于osgi的地方，在我看来osgi拥有eRCP这样的粉丝，应该会给它在移动终端上提供广阔的舞台。然而半路杀出个程咬金，google android！第一次见到它时，我不相信osgi会输，于是就废寝忘食的研究它，结果我没有进行太多的抵抗，很快就被Android收编了。我得承认它在某些关键的因素，确实比osgi更适合移动终端。对此，我只能感叹google开源的伟大，以及摒弃jcp的雷厉风行！但是，更为重要的是，在移动互联网时代即将到来的时刻，Android为我们打开了一扇方便之门，这到底为何？</div>
<div><br />
</div>
<div>通过对Android的（java）源码进行扫描后，我看到了像jsr211，MVM这些老朋友的影子，嗯，我可不想再炒这些旧饭了。还有啥？网上热炒android用了webkit作为其浏览器的引擎，和iphone的safari使用的引擎一样，这个东西应该不错，因为我一直觉得eRCP没有很好的web控件，使得它在移动平台上逊色不少，于是我翻到了android.webkit这个java包，wow! Google给webkit封装了很多java的接口，这真是java开发人员的福气，（听说很多java开发人员对sun的javafx期待度最高的就是一个传说中的JWebView控件，但是不知道出来没，算了，我懒得查证了，因为俺现在不想浪费太多在sun java上，呵呵），不过我觉得这更是广大互联网应用开发人员的福气！想想！用html + css + javascript就能编写android的类似电话簿，日历甚至手机桌面的应用，这难道不让您浮想联翩吗？所以，如果说Android为移动终端进入互联网开了一扇门，那么android.webkit.WebView就是这扇门的金钥匙，而webkit就是通向互联网的康庄大道！</div>
<div><br />
</div>
<div>其实android的webview是一个极端复杂的控件，而我个人认为它是可以实现现在热炒的RIA/webos等概念的基石！虽然我进入这个领域不长，但觉得它非常有意思，很有前途，所以我打算写一个系列，分享对它的理解，强烈欢迎各位高手指点！</div>
<div><br />
</div>
<div>怎么开始说呢？不知道大家有没有注意，年初Palm公司在CES上palm pre的基于webkit的webos惊艳之秀，十足掉起了大家的胃口，这是我听到第一个冠以webos的移动终端，这是不是意味着目前由palm来唱这个webos的独角戏呢？答案当然不是，其实很多终端厂家以及平台厂商很早就率领大部队兵临webos的城下了，相信很快一场硝烟弥漫的战争就要开始了......</div>
<div><br />
</div>
<div>欲知端的，敬请关注移本系列第二篇--忽如一夜春风来，web花开各终端</div>
<img src ="http://www.blogjava.net/Ferrari4000/aggbug/258689.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Ferrari4000/" target="_blank">勤劳的蜜蜂</a> 2009-03-09 22:53 <a href="http://www.blogjava.net/Ferrari4000/archive/2009/03/09/258689.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OSGi介绍（七）bundle和service(续)</title><link>http://www.blogjava.net/Ferrari4000/archive/2007/07/21/131670.html</link><dc:creator>勤劳的蜜蜂</dc:creator><author>勤劳的蜜蜂</author><pubDate>Sat, 21 Jul 2007 14:28:00 GMT</pubDate><guid>http://www.blogjava.net/Ferrari4000/archive/2007/07/21/131670.html</guid><wfw:comment>http://www.blogjava.net/Ferrari4000/comments/131670.html</wfw:comment><comments>http://www.blogjava.net/Ferrari4000/archive/2007/07/21/131670.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/Ferrari4000/comments/commentRss/131670.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Ferrari4000/services/trackbacks/131670.html</trackback:ping><description><![CDATA[<p>接上一篇的例子，为了更具体一点，我们考虑这样的case,<br>假设房地产开发商construction A采纳了规划公司design A的方案，打算建造公寓类型的房子CityApartment<br>然后客户A买了一套房子</p>
<p>用ooa方式分析这个case，<br>我抽象这几个实体：规划公司，图纸类型，开发商，房子，买房人<br>然后描述这几件事情：开发商选择设计图纸，盖楼然后销售；买房人根据图纸买房并使用房子</p>
<p>下面是我用java语言来简单描述它：</p>
<p>design A 公司</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000">&nbsp;design.a;<br><img id=Codehighlighter1_38_53_Open_Image onclick="this.style.display='none'; Codehighlighter1_38_53_Open_Text.style.display='none'; Codehighlighter1_38_53_Closed_Image.style.display='inline'; Codehighlighter1_38_53_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_38_53_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_38_53_Closed_Text.style.display='none'; Codehighlighter1_38_53_Open_Image.style.display='inline'; Codehighlighter1_38_53_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000">&nbsp;Apartment&nbsp;</span><span id=Codehighlighter1_38_53_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_38_53_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><img src="http://www.blogjava.net/Images/dot.gif">..</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">方法省略先</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #000000">}</span></span></div>
<p>&nbsp;</p>
<p>开发商construction A</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000">&nbsp;construction.a<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;design.a.</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">开发商要按照图纸盖楼</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_97_111_Open_Image onclick="this.style.display='none'; Codehighlighter1_97_111_Open_Text.style.display='none'; Codehighlighter1_97_111_Closed_Image.style.display='inline'; Codehighlighter1_97_111_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_97_111_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_97_111_Closed_Text.style.display='none'; Codehighlighter1_97_111_Open_Image.style.display='inline'; Codehighlighter1_97_111_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;CityApartment&nbsp;</span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000">&nbsp;Apartment&nbsp;</span><span id=Codehighlighter1_97_111_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_97_111_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><img src="http://www.blogjava.net/Images/dot.gif">.</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">方法省略先</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_159_162_Open_Image onclick="this.style.display='none'; Codehighlighter1_159_162_Open_Text.style.display='none'; Codehighlighter1_159_162_Closed_Image.style.display='inline'; Codehighlighter1_159_162_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_159_162_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_159_162_Closed_Text.style.display='none'; Codehighlighter1_159_162_Open_Image.style.display='inline'; Codehighlighter1_159_162_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Construction&nbsp;</span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000">&nbsp;BundleActivator</span><span id=Codehighlighter1_159_162_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_159_162_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span></div>
<p><br>客户 costumer A</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000">&nbsp;customer.a<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;design.a.</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">客户要按照图纸选择房子</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_95_109_Open_Image onclick="this.style.display='none'; Codehighlighter1_95_109_Open_Text.style.display='none'; Codehighlighter1_95_109_Closed_Image.style.display='inline'; Codehighlighter1_95_109_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_95_109_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_95_109_Closed_Text.style.display='none'; Codehighlighter1_95_109_Open_Image.style.display='inline'; Codehighlighter1_95_109_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Customer&nbsp;</span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000">&nbsp;BundleActivator&nbsp;</span><span id=Codehighlighter1_95_109_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_95_109_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><img src="http://www.blogjava.net/Images/dot.gif">.</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">方法省略先</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span></div>
<p><br>然后我们把他们分别做成bundle<br>Bundle A : design A<br>其manifest中这样描述<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">BundleSymbolicName:&nbsp;design&nbsp;A<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>Export</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">Package:&nbsp;design.a<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span></div>
<p><br>Bundle B : construction A<br>其manifest中这样描述</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">BundleSymbolicName:&nbsp;construction&nbsp;A<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>Import</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">Package:&nbsp;design.a<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>Bundle</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">Activator:&nbsp;construction.a.Construction<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span></div>
<p><br>Bundle C : customer C<br>其manifest中这样描述</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">BundleSymbolicName:&nbsp;customer&nbsp;C<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>Import</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">Package:&nbsp;design.a<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>Bundle</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">Activator:&nbsp;customer.c.Customer<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span></div>
<p><br><br>这样，装入到framework后，framework就会把BundlB和C与BundleA关联起来，正好描述开发商A选择design A的图纸，客户A也不得不选择design A的图纸啦<br>可是，单从这里，我们看不出来，开发商和客户拿同一份图纸干什么。那我们得必须在BundleB和C的实现里面写点东西来说明。</p>
<p>这里给出开发商construction.a.Construction的伪代码：</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_46_522_Open_Image onclick="this.style.display='none'; Codehighlighter1_46_522_Open_Text.style.display='none'; Codehighlighter1_46_522_Closed_Image.style.display='inline'; Codehighlighter1_46_522_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_46_522_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_46_522_Closed_Text.style.display='none'; Codehighlighter1_46_522_Open_Image.style.display='inline'; Codehighlighter1_46_522_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Construction&nbsp;</span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000">&nbsp;BundleActivator&nbsp;</span><span id=Codehighlighter1_46_522_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_46_522_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img id=Codehighlighter1_90_520_Open_Image onclick="this.style.display='none'; Codehighlighter1_90_520_Open_Text.style.display='none'; Codehighlighter1_90_520_Closed_Image.style.display='inline'; Codehighlighter1_90_520_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_90_520_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_90_520_Closed_Text.style.display='none'; Codehighlighter1_90_520_Open_Image.style.display='inline'; Codehighlighter1_90_520_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;start(BundleContext&nbsp;context)</span><span id=Codehighlighter1_90_520_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_90_520_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;CityApartment&nbsp;apartment&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;Hashtable&nbsp;properties&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br><img id=Codehighlighter1_188_498_Open_Image onclick="this.style.display='none'; Codehighlighter1_188_498_Open_Text.style.display='none'; Codehighlighter1_188_498_Closed_Image.style.display='inline'; Codehighlighter1_188_498_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_188_498_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_188_498_Closed_Text.style.display='none'; Codehighlighter1_188_498_Open_Image.style.display='inline'; Codehighlighter1_188_498_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)</span><span id=Codehighlighter1_188_498_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_188_498_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;properties&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Hashtable();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;properties.put(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">price</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Integer(</span><span style="COLOR: #000000">1000</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">));</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">开发商为房子定价</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;apartment&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;CityApartment();</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">一套房子盖好<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">把房子按照公寓注册出去并打广告，等待客户来购买，framework就相当于一个售楼处兼房屋中介</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_434_441_Open_Image onclick="this.style.display='none'; Codehighlighter1_434_441_Open_Text.style.display='none'; Codehighlighter1_434_441_Closed_Image.style.display='inline'; Codehighlighter1_434_441_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_434_441_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_434_441_Closed_Text.style.display='none'; Codehighlighter1_434_441_Open_Image.style.display='inline'; Codehighlighter1_434_441_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;context.registerService(Apartment.</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">.getName()</span><span id=Codehighlighter1_434_441_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_434_441_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">公寓类型</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000">,apartment</span><span id=Codehighlighter1_452_463_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_452_463_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">房子作为服务对象</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000">,properties</span><span id=Codehighlighter1_475_488_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_475_488_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">与房子相关的附带信息</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">这样开发商一共注册一百套房子</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top></span><span style="COLOR: #000000">&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span></div>
<p><br>而客户的代码可以如下：</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_42_344_Open_Image onclick="this.style.display='none'; Codehighlighter1_42_344_Open_Text.style.display='none'; Codehighlighter1_42_344_Closed_Image.style.display='inline'; Codehighlighter1_42_344_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_42_344_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_42_344_Closed_Text.style.display='none'; Codehighlighter1_42_344_Open_Image.style.display='inline'; Codehighlighter1_42_344_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Customer&nbsp;</span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000">&nbsp;BundleActivator&nbsp;</span><span id=Codehighlighter1_42_344_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_42_344_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_85_342_Open_Image onclick="this.style.display='none'; Codehighlighter1_85_342_Open_Text.style.display='none'; Codehighlighter1_85_342_Closed_Image.style.display='inline'; Codehighlighter1_85_342_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_85_342_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_85_342_Closed_Text.style.display='none'; Codehighlighter1_85_342_Open_Image.style.display='inline'; Codehighlighter1_85_342_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;start(BundleContext&nbsp;context)</span><span id=Codehighlighter1_85_342_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_85_342_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;Apartment&nbsp;apartment&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;ServiceReference&nbsp;ref&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;context.getServiceReference(Apartment.</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">.getName,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">(price=1050)</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">先签署购房合同，而且指明选择Apartment类型,价格为1050的房子。</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;apartment&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(Apartment)context.getService(ref);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">然后买到房子<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">买房人就可以使用房子apartment对象进行日常生活了</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top></span><span style="COLOR: #000000">&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span></div>
<p><br>这样，我们就很清楚的看出，Design A为Construction A和Customer A提供了共同的Apartment定义，才使得他们有交易的可能。于此同时，Construction A和Customer A之间的耦合是非常松的，因为，如果有另外一个开发商onstruction B加入进来也构造了Apartment的对象，Customer就可以通过改变选择条件，轻易的获得B的房子，而客户本身不关心房子是A还是B盖的，这个是典型的面向对象的多态应用。</p>
<p>总的说来，Bundle在framework的帮助下，使得其他bundle使用其类型定义成为可能。service就是在这些共享的类型定义基础上产生的具体对象，而使用这些service对象的bundle，必然也是对应共享类型的使用者。<br>这种类型共享，在osgi里面叫做"class space". framework运行时通过关联bundle之间的类型定义，可以构成一个或多个"class space"，而某个bundle在framework里面，只能处在一个"class space"里面，不能同时出现在多个"class space"中。<br>怎么理解这个话呢？请看下一篇，外星人入侵了。</p>
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/Ferrari4000/aggbug/131670.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Ferrari4000/" target="_blank">勤劳的蜜蜂</a> 2007-07-21 22:28 <a href="http://www.blogjava.net/Ferrari4000/archive/2007/07/21/131670.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OSGi 介绍（七）bundle和service的关系</title><link>http://www.blogjava.net/Ferrari4000/archive/2007/07/16/130692.html</link><dc:creator>勤劳的蜜蜂</dc:creator><author>勤劳的蜜蜂</author><pubDate>Mon, 16 Jul 2007 15:31:00 GMT</pubDate><guid>http://www.blogjava.net/Ferrari4000/archive/2007/07/16/130692.html</guid><wfw:comment>http://www.blogjava.net/Ferrari4000/comments/130692.html</wfw:comment><comments>http://www.blogjava.net/Ferrari4000/archive/2007/07/16/130692.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/Ferrari4000/comments/commentRss/130692.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Ferrari4000/services/trackbacks/130692.html</trackback:ping><description><![CDATA[<p>osgi系列已经发表了有将近2年的时间了，很高兴这期间得到了许多朋友的关注，你们和我的讨论切磋都让我兴奋无比。而过去很长的时间里，由于灵感枯竭外加精力有限，不能给大家分享更多osgi的精彩，实在辜负大家的期望，还请谅解。不过，根据这段时间大家和我私下的讨论，发现很多人都苦恼于分不清楚bundle和service的关系，而我的osgi 5-6又臭又长，而且还非常依赖技术，实在是坑害入门者的必备武器。这个不足，犹如头上方圆半尺盘旋的苍蝇，困扰着我，解释的邮件也不知写多少，估计收效甚微。于是我决定再次出山，写一个惊世骇俗的分析文章，力图让更多读者都能够把这两个疯马牛理清楚。</p>
<p>开讲之前，还是用老办法，给大家举个例子。放心，这个例子一点都不技术，而且我相信你可能比我还清楚。大家都知道房地产商是怎么运作楼盘的吧。据我浅显的认识，他们都会先进行一些图纸上的规划，里面包含小区的整体规模，楼房外观以及广大疾苦民众最为关心和渴求的户型图。据说，很多房地产商在搞定政府某些关键部门（个人意见仅供参考）拿到一块地后，根本不用费心思去自己规划这些自己都一窍不通的东西，只要请一个有资质的第三方公司写写画画，甚至照搬某西方发达国家的某社区概念，冠于中国特色云云，就能使广大民众趋之若鹜，倾囊抢购。ok，你可能受不了我又愤世嫉俗了，这个到底和osgi有啥关系？别着急，天色已经很晚，下次某个时间请继续关注osgi(七)续，其间，请大家先考虑一下，如何用ooa的方式来描述人们如何购房，以及在房子里进行日常生活这样的简单场景。</p>
<img src ="http://www.blogjava.net/Ferrari4000/aggbug/130692.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Ferrari4000/" target="_blank">勤劳的蜜蜂</a> 2007-07-16 23:31 <a href="http://www.blogjava.net/Ferrari4000/archive/2007/07/16/130692.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OSGi on mobile phone !</title><link>http://www.blogjava.net/Ferrari4000/archive/2007/05/14/117256.html</link><dc:creator>勤劳的蜜蜂</dc:creator><author>勤劳的蜜蜂</author><pubDate>Mon, 14 May 2007 02:11:00 GMT</pubDate><guid>http://www.blogjava.net/Ferrari4000/archive/2007/05/14/117256.html</guid><wfw:comment>http://www.blogjava.net/Ferrari4000/comments/117256.html</wfw:comment><comments>http://www.blogjava.net/Ferrari4000/archive/2007/05/14/117256.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Ferrari4000/comments/commentRss/117256.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Ferrari4000/services/trackbacks/117256.html</trackback:ping><description><![CDATA[<p>如果你一直关注osgi在embedded的发展,并且还能到旧金山参加正在举行的java one,那我真是羡慕死你了.<br><br>Nokia在她的N800上demo运行了osgi(此消息来源于david beers对BJ在osgi alliance blog上的评论,关于demo可以看这个link <a href="http://thehereweb.googlepages.com/">http://thehereweb.googlepages.com/</a>)<br>同时美国运行商Sprint也宣布采用osgi的手机平台将会在年底面世.多么值得期待的事情!</p>
<img src ="http://www.blogjava.net/Ferrari4000/aggbug/117256.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Ferrari4000/" target="_blank">勤劳的蜜蜂</a> 2007-05-14 10:11 <a href="http://www.blogjava.net/Ferrari4000/archive/2007/05/14/117256.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>framework implementation updated</title><link>http://www.blogjava.net/Ferrari4000/archive/2006/09/16/70100.html</link><dc:creator>勤劳的蜜蜂</dc:creator><author>勤劳的蜜蜂</author><pubDate>Sat, 16 Sep 2006 15:40:00 GMT</pubDate><guid>http://www.blogjava.net/Ferrari4000/archive/2006/09/16/70100.html</guid><wfw:comment>http://www.blogjava.net/Ferrari4000/comments/70100.html</wfw:comment><comments>http://www.blogjava.net/Ferrari4000/archive/2006/09/16/70100.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Ferrari4000/comments/commentRss/70100.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Ferrari4000/services/trackbacks/70100.html</trackback:ping><description><![CDATA[
		<p>瞎整了半年多，克服了重重困难，终于把原来framework做了更新，如果有兴趣，还可以按照原来的Link下载。<br />framework下载后，解压并运行startframework.bat就可以启动framework了。<br />目前该framework只支持在内存中存储bundle.<br /><br />另外，多增加了一个管理bundle，它为framework提供了简单的图形化操作界面，可以在这里下载。</p>
		<p>
				<a href="/Files/Ferrari4000/bundlemanagement.zip">http://www.blogjava.net/Files/Ferrari4000/bundlemanagement.zip</a>
				<br />
				<br />下载后，最好先把名字改为bundlemanagement.jar<br />然后可以这样安装，假设该文件下载到d:\bundles下，则可以在framework的shell下输入<br />in file:d:/bundles/bundlemanagement.jar<br />安装该bundle，安装成功后输入stt 1（注意：1是数字一），启动该bundle就可以出现图形操作界面了。<br /><br />图形界面提供bundle的安装（只支持本地安装），启动，停止，升级和删除等简单功能。<br />其他功能会在后面陆续增加。目前这个bundle只能运行在j2se环境下。<br /><br />给的源代码没有很好的build文件，等我有时间了，再写一个。<br /><br />感谢毕嘉兄弟的支持，他帮助设计了bundle存储模块以及实现了bundle在内存存储的第一版。<br /><br />有啥问题，可以直接给我发邮件，<a href="mailto:jerrylee.li@gmail.com">jerrylee.li@gmail.com</a><br /><br /></p>
<img src ="http://www.blogjava.net/Ferrari4000/aggbug/70100.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Ferrari4000/" target="_blank">勤劳的蜜蜂</a> 2006-09-16 23:40 <a href="http://www.blogjava.net/Ferrari4000/archive/2006/09/16/70100.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OSGi的曙光？</title><link>http://www.blogjava.net/Ferrari4000/archive/2006/03/03/33453.html</link><dc:creator>勤劳的蜜蜂</dc:creator><author>勤劳的蜜蜂</author><pubDate>Fri, 03 Mar 2006 05:51:00 GMT</pubDate><guid>http://www.blogjava.net/Ferrari4000/archive/2006/03/03/33453.html</guid><wfw:comment>http://www.blogjava.net/Ferrari4000/comments/33453.html</wfw:comment><comments>http://www.blogjava.net/Ferrari4000/archive/2006/03/03/33453.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/Ferrari4000/comments/commentRss/33453.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Ferrari4000/services/trackbacks/33453.html</trackback:ping><description><![CDATA[前两天，看到Peter的blog里说，由ibm牵头发起了jsr291（<A href="http://www.jcp.org/en/jsr/detail?id=291">http://www.jcp.org/en/jsr/detail?id=291</A>），<BR>要把osgi的core应用到目前的j2se上，以填补jsr277发布前的需求空白。<BR><BR>osgi和277的pk开始了！我投osgi一票，呵呵，你买谁？<BR><img src ="http://www.blogjava.net/Ferrari4000/aggbug/33453.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Ferrari4000/" target="_blank">勤劳的蜜蜂</a> 2006-03-03 13:51 <a href="http://www.blogjava.net/Ferrari4000/archive/2006/03/03/33453.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OSGi Alliance开设面向公众的邮件列表</title><link>http://www.blogjava.net/Ferrari4000/archive/2006/02/16/30919.html</link><dc:creator>勤劳的蜜蜂</dc:creator><author>勤劳的蜜蜂</author><pubDate>Thu, 16 Feb 2006 02:20:00 GMT</pubDate><guid>http://www.blogjava.net/Ferrari4000/archive/2006/02/16/30919.html</guid><wfw:comment>http://www.blogjava.net/Ferrari4000/comments/30919.html</wfw:comment><comments>http://www.blogjava.net/Ferrari4000/archive/2006/02/16/30919.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Ferrari4000/comments/commentRss/30919.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Ferrari4000/services/trackbacks/30919.html</trackback:ping><description><![CDATA[<P>继开设Blog后（<A href="http://www.osgi.org/blog/index.html">http://www.osgi.org/blog/index.html</A>），昨天OSGi Alliance又宣布开设一个public的mail list，每个对OSGi感兴趣的人都可以加入到这个列表中，通过这个列表可以讯问OSGi的相关的各种问题以及订阅列表的邮件。<BR>请到<A href="http://bundles.osgi.org/mailman/listinfo/osgi-dev">http://bundles.osgi.org/mailman/listinfo/osgi-dev</A>这里注册。<BR><BR>下面是BJ Hargrave的代表OSGi Alliance发的announcement<BR><BR><BR>Hello,</P>
<P>As part of the OSGi evangelism work, I would like to announce that OSGi now has a new public mail list for OSGi technical questions and discussion. This mail list is a public list and is open to anyone to participate. This new list is mainly for non-members to discuss OSGi technology and ask question about the technology. ......</P>
<P>The new mail list address is:</P>
<P><A href="mailto:osgi-dev@bundles.osgi.org">osgi-dev@bundles.osgi.org</A></P>
<P>You can subscribe to the list here: <BR><A href="http://bundles.osgi.org/mailman/listinfo/osgi-dev">http://bundles.osgi.org/mailman/listinfo/osgi-dev</A> or by sending an e-mail to <A href="mailto:osgi-dev-subscribe@bundles.osgi.org">osgi-dev-subscribe@bundles.osgi.org</A>.</P>
<P>So please go ahead and subscribe to the new osgi-dev mail list. Your participation there can help educate others about the OSGi technology.</P>
<P>BJ Hargrave<BR>Senior Technical Staff Member, IBM<BR>OSGi Fellow and CTO of the OSGi Alliance</P><img src ="http://www.blogjava.net/Ferrari4000/aggbug/30919.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Ferrari4000/" target="_blank">勤劳的蜜蜂</a> 2006-02-16 10:20 <a href="http://www.blogjava.net/Ferrari4000/archive/2006/02/16/30919.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>framework implementation</title><link>http://www.blogjava.net/Ferrari4000/archive/2006/02/15/30737.html</link><dc:creator>勤劳的蜜蜂</dc:creator><author>勤劳的蜜蜂</author><pubDate>Wed, 15 Feb 2006 01:15:00 GMT</pubDate><guid>http://www.blogjava.net/Ferrari4000/archive/2006/02/15/30737.html</guid><wfw:comment>http://www.blogjava.net/Ferrari4000/comments/30737.html</wfw:comment><comments>http://www.blogjava.net/Ferrari4000/archive/2006/02/15/30737.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.blogjava.net/Ferrari4000/comments/commentRss/30737.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Ferrari4000/services/trackbacks/30737.html</trackback:ping><description><![CDATA[<P>这里是我目前的成果。<BR><A href="/Files/Ferrari4000/framework.zip">http://www.blogjava.net/Files/Ferrari4000/framework.zip</A>包含了framework的jar文件。<BR>解压后，直接运行.bat文件就可以了。这个framework实现了r4core的大部分api（除一些支持local和安全的外，secrurity admin和conditional permission这两个服务也没有实现，url service也没有实现），输入help可以看到可以运行的命令（不过全是英文的，还是我写的，将就一下吧）。<BR><BR><A href="/Files/Ferrari4000/src.zip">http://www.blogjava.net/Files/Ferrari4000/src.zip</A>包含所有源码。代码有点乱，hoho<BR><BR><STRONG><FONT style="BACKGROUND-COLOR: #ffffff" color=#ff0000>要成功编译代码，您还需要下载这个<A HREF="/Files/Ferrari4000/osgi.rar">http://www.blogjava.net/Files/Ferrari4000/osgi.rar</A></FONT></STRONG><BR><FONT style="BACKGROUND-COLOR: #ffffff"><FONT color=#ff0000><STRONG>解压并后得到4个jar，并把他们放入到build path中，import顺序保证它们优先于jre就可以了。</STRONG><BR></FONT></FONT><BR>我打算重新编写了。把framework的实现重新规划一下，然后实现core的所有内容，进而再实现cmpn的所有服务。<BR>如果你对开发osgi framework感兴趣，一起来吧！<BR><BR>给我发信：<A href="mailto:jerrylee.li@gmail.com">jerrylee.li@gmail.com</A><BR></P><img src ="http://www.blogjava.net/Ferrari4000/aggbug/30737.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Ferrari4000/" target="_blank">勤劳的蜜蜂</a> 2006-02-15 09:15 <a href="http://www.blogjava.net/Ferrari4000/archive/2006/02/15/30737.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>