欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

巧用Android網絡通信技術,在網絡上直接傳輸對象

系統(tǒng) 2273 0

轉載請注明出處: http://blog.csdn.net/sinyu890807/article/details/8967080

要做一個優(yōu)秀的Android應用,使用到網絡通信技術是必不可少的,很難想象一款沒有網絡交互的軟件最終能發(fā)展得多成功。那么我們來看一下,一般Android應用程序里都是怎么實現網絡交互的,這里拿一個Boook對象為例:

巧用Android網絡通信技術,在網絡上直接傳輸對象

如上圖所示,首先在手機端生成一個Book對象,里面包含書名、作者、價格等數據。為了要將這些數據發(fā)送到服務器端,我們要從Book對象中把數據取出,然后組裝成XML格式的字符串。接著通過網絡API,把組裝好的XML字符串發(fā)送到服務器端。服務器端接到了客戶端發(fā)來的XML字符串,就要對該XML進行解析。然后把解析出的數據重新組裝成Book對象,之后服務器端就可以對該對象進行一系列其它的操作了。

當然XML格式的數據量比較大,現在很多Android應用為了節(jié)省流量,都改用JSON格式來傳輸數據了。不過不管是使用XML還是JSON,上圖中描述的步驟總是少不了的。

感覺使用這種方式來傳輸數據,每次封裝和解析XML的過程是最繁瑣的,那么能不能把這最繁瑣的過程繞過去呢?

巧用Android網絡通信技術,在網絡上直接傳輸對象

如上圖所示,如果可以調用網絡API,直接把Book對象發(fā)送到服務器端,那么整個網絡交互過程就會變得非常簡單,下面我們就來看看如何實現。

新建一個Android工程,命名為ClientTest作為客戶端工程。這里第一個要確定的就是待傳輸的對象,我們新建一個Book類,代碼如下:

    package com.test;

import java.io.Serializable;

public class Book implements Serializable {

	private String bookName;

	private String author;

	private double price;

	private int pages;

	public String getBookName() {
		return bookName;
	}

	public void setBookName(String bookName) {
		this.bookName = bookName;
	}

	public String getAuthor() {
		return author;
	}

	public void setAuthor(String author) {
		this.author = author;
	}

	public double getPrice() {
		return price;
	}

	public void setPrice(double price) {
		this.price = price;
	}

	public int getPages() {
		return pages;
	}

	public void setPages(int pages) {
		this.pages = pages;
	}

}

  
這個類就是一個簡單的POJO,但是要注意一點,它實現了Serializable接口,如果想在網絡上傳輸對象,那么該對象就一定要實現Serializable接口。

接下來打開或新建activity_main.xml作為程序的主布局文件,加入如下代碼:

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#000"
    tools:context=".MainActivity" >

   <Button 
     android:id="@+id/send"  
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:text="發(fā)送"
     />

</RelativeLayout>
  
這個布局里面就是包含了一個按鈕,點擊這個按鈕就去發(fā)出網絡請求。

接下來打開或新建MainActivity作為程序的主Activity,其中加入如下代碼:

    public class MainActivity extends Activity implements OnClickListener {

	private Button send;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		send = (Button) findViewById(R.id.send);
		send.setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		Book book = new Book();
		book.setBookName("Android高級編程");
		book.setAuthor("Reto Meier");
		book.setPages(398);
		book.setPrice(59.00);
		URL url = null;
		ObjectOutputStream oos = null;
		try {
			url = new URL("http://192.168.1.103:8080/ServerTest/servlet/TestServlet");
			HttpURLConnection connection = (HttpURLConnection) url.openConnection();
			connection.setDoInput(true);
			connection.setDoOutput(true);
			connection.setConnectTimeout(10000);
			connection.setReadTimeout(10000);
			connection.setRequestMethod("POST");
			oos = new ObjectOutputStream(connection.getOutputStream());
			oos.writeObject(book);
			InputStreamReader read = new InputStreamReader(connection.getInputStream());
			BufferedReader br = new BufferedReader(read);
			String line = "";
			while ((line = br.readLine()) != null) {
				Log.d("TAG", "line is " + line);
			}
			br.close();
			connection.disconnect();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {

		}
	}

}

  
我們可以看到,在onClick方法中處理了按扭的點擊事件。這里首先new出了一個Book對象作為待傳輸數據,接著new出了一個URL對象,指明了服務器端的接口地址,然后對HttpURLConnection的一些可選參數進行配置。接著通過調用ObjectOutputStream的writeObject方法,將Book對象發(fā)送到服務器端,然后等服務器端返回數據,最后關閉流和連接。

注意由于我們使用了網絡功能,因此需要在AndroidManifest.xml中加入如下權限:

    <uses-permission android:name="android.permission.INTERNET" />
  
好了,目前Android端的代碼已經開發(fā)完成,我們現在開始來編寫服務器端代碼。

新建一個名為ServerTest的Web Project,要做的第一件事就在Web Project下建立一個和Android端一樣的Book類。這里有個非常重要的點大家一定要注意,服務器端的Book類和Android端的Book類,包名和類名都必須相同,否則會出現類型轉換異常。這里由于兩個Book類的內容是完全一樣的,我就不再重復貼出。

然后新建一個Java Servlet作為網絡訪問接口,我們重寫它的doPost方法,具體代碼如下:

    public class TestServlet extends HttpServlet {

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		ObjectInputStream ois = null;
		try {
			ois = new ObjectInputStream(request.getInputStream());
			Book book = (Book) ois.readObject();
			System.out.println("書名是: " + book.getBookName());
			System.out.println("作者是: " + book.getAuthor());
			System.out.println("價格是: " + book.getPrice());
			System.out.println("頁數是: " + book.getPages());
			PrintWriter out = response.getWriter();
			out.print("success");
			out.flush();
			out.close();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			ois.close();
		}
	}
	
}
  
可以看到,我們首先通過調用HttpServletRequest的getInputStream方法獲取到輸入流,然后將這個輸入流組裝成ObjectInputStream對象。接下來就很簡單了,直接調用ObjectInputStream的readObject方法,將網絡上傳輸過來的Book對象獲取到,然后打印出Book中攜帶的數據,最后向客戶端返回success。

現在我們來運行一下程序,首先將ServerTest這個項目布置到服務器上,并開啟服務器待命。接著在手機上打開ClientTest這個應用程序,如下圖所示:

巧用Android網絡通信技術,在網絡上直接傳輸對象

點擊發(fā)送發(fā)出網絡請求,可以看到服務器端打印結果如下:

巧用Android網絡通信技術,在網絡上直接傳輸對象

而Android端打印結果如下:


由此我們可以看出,網絡上進行對象傳輸已經成功了!不需要通過繁瑣的XML封裝和解析,我們也成功將Book中的數據完整地從Android端發(fā)送到了服務器端。

好了,今天的講解到此結束,有疑問的朋友請在下面留言。

源碼下載,請點擊這里

巧用Android網絡通信技術,在網絡上直接傳輸對象


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 69国产成人精品午夜福中文 | 亚洲一区二区三区影院 | 香蕉久久一区二区不卡无毒影院 | 久久久久久全国免费观看 | 欧美国产中文字幕 | 欧美日韩视频在线第一区二区三区 | 久草视频免费播放 | 亚洲a网 | 麻豆视频在线播放 | 97超级碰碰碰视频在线视频观看 | 久久综合九色综合桃花 | 成人亚洲网站 | 天天射天天操天天干 | 成人激情视频网站 | 午夜私人影院粉色视频我要 | www.久草.com| 精品久久久久久综合日本 | 色a综合 | 手机三级电影 | 亚洲电影免费观看高清完整版在线观 | 神秘电影91| 欧美理论影院在线观看免费 | A片扒开双腿猛进入免费观看 | 亚洲国产品综合人成综合网站 | 国产精品成人不卡在线观看 | 国产精品国产a | 亚洲美女亚洲精品久久久久 | 国产高清视频在线观看 | 天天干天天操天天爽 | va日本| 一区二区三区免费网站 | 亚洲精品一区henhen色 | 双性精h调教灌尿打屁股的文案 | 91精品欧美成人 | 欧美午夜免费观看福利片 | 国产扩阴视频 | 久久精品国产一区二区 | 日韩中文字幕不卡 | 中文字幕 国产 | 8090色 | 日韩欧美在 |