转载

Android 学习笔记之网络通信基础+WebView....

PS:加快学习进度...下周一完成Android网络通信...然后正式进入实战...

学习内容:

1.Android中Http基础...

2.Android中的Socket基础...

3.Android中Web Service基础...

4.Android中蓝牙基础...

5.Android中的Wi-Fi基础...

6.使用WebView...

这一章仅仅说一下基础的东西,对上面说的每一种东西进行一下简单的介绍,不涉及什么代码...自己也是学了一下简单的基础知识,但是这些基础还是有一些重要的东西...因此简单的介绍一下...

Android的Http协议:

Http协议,估计大家都很清楚,但是却不一定真的知道它到底是干嘛的...Http协议是建立在TCP协议的一种应用...用于传送WWW数据...Http使用请求/响应模式...Http的工作流程,一般都是客户端发出Http请求,服务器收到请求之后,处理客户端的请求,处理完成之后通过Http应答将处理完毕的结果返回给客户端...Http的请求方法有POST和GET两种方式...一般保密的数据使用POST方式,一般不是什么保密的数据我们可以去使用GET...

Android的Socket:

Socket:套接字,学过java的都知道套接字,它是完成应用之间进行通信的另外一种方式,客户端和服务端想要连接必须至少要建立一个套接字..客户端想要连接服务端需要使用它们共有的套接字和相应服务器的端口号码,这样才能够真正的完成客户端和服务端的连接...那么Socket到底是怎么将它们进行连接的呢?

Socket的连接过程:服务端并不定位具体客户端的套接字,而是处于等待连接的状态,对数据链路处于一个监控的状态.当客户端务端通过套接字发送请求后,服务端通过监测对相应的客户端进行响应...然后开启一个新的线程,告诉客户端这个连接已经建立成功,这样客户端和服务端就可以进行相应的通信了...

Android的Web Service基础...

Web Service是为了支持网络不同机器之间互操作的一个软件系统...它最大的优势就是可以跨平台,跨语言,说白了就是就算是不同操作系统上的应用软件也可以完成通信,并且我们也不需要知道这个软件到底是使用什么语言进行开发的...由于这个原因远程调用才能够得以实现,并且分布式系统也是基于这个东西才能够出现的...

简单的介绍一下什么是分布式系统...

分布式系统估计大家是都听说过,但是不知道它到底是个什么东西...所谓分布式系统就是多个计算机组成的一个集合,每一个节点都是一个单独的计算机,并且每个节点之间基本不会互相形成影响,都独立的去做自己的工作,分布式系统通过并行执行的方式来迅速的完成对一个任务的处理...相互之间基本不会有任何的影响..这样就实现了一个任务并不是按顺序进行,而是一个任务被分成多个模块,多个模块同时执行..这就是分布式系统的优点....并且这些独立的计算机并不一定非要在同一位置形成一个局域网才行,而是可以不受地域的限制完成...这样就实现了远程调用...其实我们的电脑也是使用了这个思想,就拿笔记本来说,现在4核是非常普遍了,两个CPU,4个异步线程...可以对同一个任务以并行的方式进行执行,这样可以更加快速的完成对一个任务的处理...同时可以提高CPU的利用率...分布式系统给用户的体验就是用户使用着自己的计算机就可以完成所有的事情...

Web Service在构建的时候需要使用到四种协议...

XML...可扩展的标记性语言...是Web Service中数据的基本格式...这个应该是最熟悉不过了,XML不受任何平台和语言的限制...一个编程语言如果不支持XML,那这语言基本就废了...

SOAP:简单对象访问协议...是用来描述Web Service进行消息传递的通信协议,它是基于XML所建立的一种协议...用于在分布式环境中交换格式化和固化信息...

WSDL:Web服务描述语言...用来描述如何与Web服务器通信的XML语言...服务的提供者通过Web服务所有的相关内容生成WSDL文档...然后发布给使用者,使用者可以通过这个文档创建SOAP请求消息...然后通过Http协议将请求传送给服务器,服务器根据请求发送给请求者一个SOAP文档,然后请求者根据WSDL文档将SOAP解析成用户能理解的方式传递给用户...这样就完成了交互...

UDDI:它是一种独立于平台的,基于XML语言用于在互联网上描述商务的协议...

Android中的蓝牙基础...

蓝牙是为了完成近距离传输的一种无线通信的协议,蓝牙的优势在于无需驱动程序,功率低,安全,稳固等优点...虽然现在智能机上还是普遍装有蓝牙这种东西,但是现在使用蓝牙却越来越少了,由于蓝牙的极限传输速度才723.1kb/s,确实不是非常的快...但是还是比较有用的...使用蓝牙需要使用到BluetoothAdapter类:这个类是蓝牙交互的接口...没有这个接口无法实现通信...BluetoothDevice:这个类用来显示蓝牙的基本信息.BluetoothSocket:

这个是连接时所需要一个套接字..就是一个连接点...Bluetoothserversocket:服务器套接字....

Android中的Wi-Fi基础...

Wi-Fi现在是非常普及的...是一种无线技术,传输速度更快,覆盖面更广的一种技术...开发Wi-Fi需要使用几个类...ScanResult...获取Wi-Fi热点...WiFiConfiguration:这个类用于完成Wi-Fi的配置,比如说安全信息等...WiFiInfo主要进行无线连接的描述...WiFiManager用来管理WiFi...

WebView组件...

Android手机中内置了一个高性能的webkit内核浏览器,在sdk被打包成WebView组件...这个组件主要应用于网页的加载,可以直接显示网页,也可以加载HTML文件,实现复杂的布局界面,但是这种方法貌似已经过时了,现在一般都是将HTML放置在Tomcat服务器上,用服务器显示HTML文件...还有一个功能就是加载JSP文件和JS实现通信...举一个实例,使用这个组件加载网页...

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  xmlns:tools="http://schemas.android.com/tools"  android:layout_width="fill_parent"  android:layout_height="fill_parent"  android:orientation="vertical"  tools:context=".MainActivity" >  <LinearLayout    android:orientation="horizontal"   android:layout_height="wrap_content"   android:layout_width="fill_parent">   <Button     android:id="@+id/open"    android:layout_height="wrap_content"    android:layout_width="wrap_content"    android:text="打开..."/>   <Button     android:id="@+id/back"    android:layout_height="wrap_content"    android:layout_width="wrap_content"    android:text="回退..."/>   <Button     android:id="@+id/forward"    android:layout_height="wrap_content"    android:layout_width="wrap_content"    android:text="前进..."/>  </LinearLayout>  <WebView    android:id="@+id/webview"   android:layout_height="fill_parent"   android:layout_width="fill_parent"/> </LinearLayout> 
package com.example.webservice; import android.os.Bundle; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; import android.view.Menu; import android.view.View; import android.webkit.WebSettings; import android.webkit.WebView; public class MainActivity extends Activity implements View.OnClickListener {  private WebView webview;  private String urldata[]=new String[]{"http://www.sina.com.cn","http://www.4399.com","http://www.cnblogs.com/RGogoing/"};  @Override  protected void onCreate(Bundle savedInstanceState) {   super.onCreate(savedInstanceState);   setContentView(R.layout.activity_main);   findViewById(R.id.open).setOnClickListener(this);   findViewById(R.id.back).setOnClickListener(this);   findViewById(R.id.forward).setOnClickListener(this);   webview=(WebView) findViewById(R.id.webview);  }  @Override  public boolean onCreateOptionsMenu(Menu menu) {   // Inflate the menu; this adds items to the action bar if it is present.   getMenuInflater().inflate(R.menu.main, menu);   return true;  }  @Override  public void onClick(View v) {   // TODO Auto-generated method stub   switch(v.getId()){   case R.id.open:    MainActivity.this.showUrlDailog();//打开按钮...    break;   case R.id.back:    if(webview.canGoBack()){     webview.goBack();//这个表示回退操作..返回上一网页...    }    break;   case R.id.forward:    if(webview.canGoForward()){     webview.goForward();//表示前进操作...    }    break;   }  }  private void showUrlDailog(){//这里建立了一个新的窗口...这个方法非常的长...直接设置了窗口的所有属性...   Dialog dialog=new AlertDialog.Builder(this).setTitle("要打开的网站").setNegativeButton("取消", new DialogInterface.OnClickListener() {    @Override    public void onClick(DialogInterface dialog, int which) {     // TODO Auto-generated method stub         }   }).setItems(this.urldata, new DialogInterface.OnClickListener() {    @Override    public void onClick(DialogInterface dialog, int which) {     // TODO Auto-generated method stub     MainActivity.this.webview.loadUrl(urldata[which]);//打开相应的网址...     WebSettings setting=webview.getSettings();//通过WebSetting对WebView进行配置和管理...     setting.setUseWideViewPort(true);//     setting.setBuiltInZoomControls(true);//设置缩放的一个显示化按钮...     setting.setSupportZoom(true);//是否支持缩放...     setting.setLoadWithOverviewMode(true);    }   }).create();   dialog.show();  } } 

上面实现了当触发按钮就可以出现一个新的窗口,这个窗口显示了三个连接...分别通往其他的网站...但是这个我们需要在配置权限属性...配置的位置就不提了..需要加入的内容是:

<uses-permission          android:name="android.permission.INTERNET"/>

最后简单的补充一下什么是三层架构...这是昨天偶然发现的一个不明确的概念...

三层架构所指的是将一个业务分为三个层次,是一种分层式结构,这三个层次分别为数据访问层,业务逻辑层,表现层...那么为什么要分层呢?为什么分为三层,而不是两层,而且不是四层呢?先说一下为什么要使用分层这种结构,目的是为了实现"高内聚低耦合"的这一重要思想,什么是"高内聚低耦合",就是在整个业务中,每一个节点都是一个独立的模块,相互之间基本不受影响,每一个模块都有自己独立的任务,某一模块一旦出现了问题并不会影响周边其他模块的工作,这就是高内聚低耦合的特性,理想的状态下是各个模块中相互之间不受任何的影响,都独立的去做自己的任务...

举一个实际的例子,比如说一个餐厅,一个餐厅要有厨师,服务员,采购员...当客户点一个菜的时候,服务员只负责将菜单交给厨师就可以了,剩下的事情全部都由厨师去完成,当食材不够的时候,那么厨师就会告知采购员去采购什么蔬菜,采购员并不需要知道厨师要怎么去做这样菜,只需要知道要买什么东西就可以了,买完东西之后直接交给厨师,剩下的事还是由厨师来做...当这个菜被做好之后,厨师只需要通知服务员就可以了,剩下的事就是服务员的事情了,只需要把东西交给客户就可以了...这样分工明确,就算是哪一个环节出现了问题,也不会对整体的业务影响很大...比如说服务员的态度不好,那么就是服务员这个环节出现了问题,那就直接开除服务员就可以了,我可以再新招聘一个服务员,服务员被开除不会影响到厨师那边...因此相互之间没有什么影响,总体的业务也没有很大的改变,只需要换一个新的服务员就可以了...这样总体呈现高内聚低耦合的特性...

那么我们来看一下两层架构,依旧是餐厅,那么一个人既是服务员,又是厨师,就比如说是这样,这样服务员层和厨师层直接绑定在了一起,当这个人一旦生病,或者是请假,那么受影响的程度就大了,我们必须还要新招一个厨师,然后再招一个服务员,或者是既能当厨师又能当服务员的一个人,这样就会对整个业务的影响就会很大,餐厅对这一个人的耦合性太强..因此这样就不是一个很好的事情...某个环节出现问题有可能导致整个程序不能工作...那这个缺点就太严重了...因此层次越少这样的问题就会越容易发生...那么为什么不是四层架构呢?其实我们是混淆了这个三层架构的概念,它只是一个模式化的思想,目的是解决刚才说的问题,三层架构只是一个概念,并不一定代表就非得是三层结构,可以使四层或者是五层,它只是为了解决上面的问题给我们提供了一个思想...层次越高,那么这个内聚性肯定强,耦合性肯定就低...因此我们需要掌握的是其思想...

正文到此结束
Loading...