time 
设为首页】【收藏本站
当前位置: 主页 > 电脑网络 > 操作系统 > 嵌入式 > Android > 巧用Android网络通信技术实现在网络上直接传输对象

巧用Android网络通信技术实现在网络上直接传输对象

时间:2014-06-18 11:36 点击:1301次 字体:[ ]




要做一个优秀的Android应用,使用到网络通信技术是必不可少的,很难想象一款没有网络交互的软件最终能发展得多成功。那么我们来看一下,一般Android应用程序里都是怎么实现网络交互的,这里拿一个Boook对象为例:

巧用Android网络通信技术实现在网络上直接传输对象_www.fengfly.com
 

如上图所示,首先在手机端生成一个Book对象,里面包含书名、作者、价格等数据。为了要将这些数据发送到服务器端,我们要从Book对象中把数据取出,然后组装成XML格式的字符串。接着通过网络API,把组装好的XML字符串发送到服务器端。服务器端接到了客户端发来的XML字符串,就要对该XML进行解析。然后把解析出的数据重新组装成Book对象,之后服务器端就可以对该对象进行一系列其它的操作了。

当然XML格式的数据量比较大,现在很多Android应用为了节省流量,都改用JSON格式来传输数据了。不过不管是使用XML还是JSON,上图中描述的步骤总是少不了的。

感觉使用这种方式来传输数据,每次封装和解析XML的过程是最繁琐的,那么能不能把这最繁琐的过程绕过去呢?

巧用Android网络通信技术实现在网络上直接传输对象_www.fengfly.com
 

如上图所示,如果可以调用网络API,直接把Book对象发送到服务器端,那么整个网络交互过程就会变得非常简单,下面我们就来看看如何实现。

新建一个Android工程,命名为ClientTest作为客户端工程。这里第一个要确定的就是待传输的对象,我们新建一个Book类,代码如下:

  1. package com.test;  
  2.  
  3. import java.io.Serializable;  
  4.  
  5. public class Book implements Serializable {  
  6.  
  7.     private String bookName;  
  8.  
  9.     private String author;  
  10.  
  11.     private double price;  
  12.  
  13.     private int pages;  
  14.  
  15.     public String getBookName() {  
  16.         return bookName;  
  17.     }  
  18.  
  19.     public void setBookName(String bookName) {  
  20.         this.bookName = bookName;  
  21.     }  
  22.  
  23.     public String getAuthor() {  
  24.         return author;  
  25.     }  
  26.  
  27.     public void setAuthor(String author) {  
  28.         this.author = author;  
  29.     }  
  30.  
  31.     public double getPrice() {  
  32.         return price;  
  33.     }  
  34.  
  35.     public void setPrice(double price) {  
  36.         this.price = price;  
  37.     }  
  38.  
  39.     public int getPages() {  
  40.         return pages;  
  41.     }  
  42.  
  43.     public void setPages(int pages) {  
  44.         this.pages = pages;  
  45.     }  
  46.  
  47. }  
  48.  

这个类就是一个简单的POJO,但是要注意一点,它实现了Serializable接口,如果想在网络上传输对象,那么该对象就一定要实现Serializable接口。

 

接下来打开或新建activity_main.xml作为程序的主布局文件,加入如下代码:

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  2.     xmlns:tools="http://schemas.android.com/tools" 
  3.     android:layout_width="match_parent" 
  4.     android:layout_height="match_parent" 
  5.     android:background="#000" 
  6.     tools:context=".MainActivity" > 
  7.  
  8.    <Button   
  9.      android:id="@+id/send"    
  10.      android:layout_width="fill_parent" 
  11.      android:layout_height="wrap_content" 
  12.      android:text="发送" 
  13.      /> 
  14.  
  15. </RelativeLayout> 

这个布局里面就是包含了一个按钮,点击这个按钮就去发出网络请求。

 

接下来打开或新建MainActivity作为程序的主Activity,其中加入如下代码:

  1. public class MainActivity extends Activity implements OnClickListener {  
  2.  
  3.     private Button send;  
  4.  
  5.     @Override 
  6.     protected void onCreate(Bundle savedInstanceState) {  
  7.         super.onCreate(savedInstanceState);  
  8.         setContentView(R.layout.activity_main);  
  9.         send = (Button) findViewById(R.id.send);  
  10.         send.setOnClickListener(this);  
  11.     }  
  12.  
  13.     @Override 
  14.     public void onClick(View v) {  
  15.         Book book = new Book();  
  16.         book.setBookName("Android高级编程");  
  17.         book.setAuthor("Reto Meier");  
  18.         book.setPages(398);  
  19.         book.setPrice(59.00);  
  20.         URL url = null;  
  21.         ObjectOutputStream oos = null;  
  22.         try {  
  23.             url = new URL("http://192.168.1.103:8080/ServerTest/servlet/TestServlet");  
  24.             HttpURLConnection connection = (HttpURLConnection) url.openConnection();  
  25.             connection.setDoInput(true);  
  26.             connection.setDoOutput(true);  
  27.             connection.setConnectTimeout(10000);  
  28.             connection.setReadTimeout(10000);  
  29.             connection.setRequestMethod("POST");  
  30.             oos = new ObjectOutputStream(connection.getOutputStream());  
  31.             oos.writeObject(book);  
  32.             InputStreamReader read = new InputStreamReader(connection.getInputStream());  
  33.             BufferedReader br = new BufferedReader(read);  
  34.             String line = "";  
  35.             while ((line = br.readLine()) != null) {  
  36.                 Log.d("TAG""line is " + line);  
  37.             }  
  38.             br.close();  
  39.             connection.disconnect();  
  40.         } catch (Exception e) {  
  41.             e.printStackTrace();  
  42.         } finally {  
  43.  
  44.         }  
  45.     }  
  46.  
  47. }  
  48.  



本文地址 : http://www.fengfly.com/plus/view-215091-1.html
标签: Android 网络通信技术 直接传输对象
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码: