快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

葡京娱乐场娱乐网址_龟发之家论坛



要做一个优秀的Android利用,应用到收集通信技巧是必弗成少的,很难想象一款没有收集交互的软件终极能成长得多成功。那么我们来看一下,一样平常Android利用法度榜样里都是怎么实现收集交互的,这里拿一个Boook工具为例:

如上图所示,首先在手机端天生一个Book工具,里面包孕书名、作者、价格等数据。为了要将这些数据发送到办事器端,我们要从Book工具中把数据掏出,然后组装成XML款式的字符串。接着经由过程收集API,把组装好的XML字符串发送到办事器端。办事器端接到了客户端发来的XML字符串,就要对该XML进行解析。然后把解析出的数据从新组装成Book工具,之后办事器端就可以对该工具进行一系列其它的操作了。

当然XML款式的数据量对照大年夜,现在很多Android利用为了节省流量,都改用JSON款式来传输数据了。不过不管是应用XML照样JSON,上图中描述的步骤老是少不了的。

感到应用这种要领来传输数据,每次封装和解析XML的历程是最繁琐的,那么能不能把这最繁琐的历程绕以前呢?

如上图所示,假如可以调用收集API,直接把Book工具发送到办事器端,那么全部收集交互历程就会变得异常简单,下面我们就来看看若何实现。

新建一个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" >

Buttonandroid:id="@+id/send"

android:layout_width="fill_parent"android:layout_height="wrap_content"

androi葡京娱乐场娱乐网址d:text="发送"/>

RelativeLayout>

这个结构里面便是包孕了一个按钮,点击这个按钮就去发出收集哀求。

接下来打开或新建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.s葡京娱乐场娱乐网址etPrice(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工具发送到办事器端,然后等办事器端返回数据,着末关闭流和连接。

留意因为我们应用了收集功能,是以必要在AndroidManifest.xml中加入如下权限:

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

好了,今朝A葡京娱乐场娱乐网址ndroid真个代码已经开拓完成,我们现在开始来编写办事器端代码。

新建一个名为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端打印结果如下:

由此我们可以看出,收集长进行工具传输已经成功了!不必要经由过程繁琐的XML封装和解析,我们也成功将Book中的数据完备地从Android端发送到了办事器端。

好了,本日的解说到此停止,有疑问的同伙请鄙人面留言。

源码下载,请点击这里

您可能还会对下面的文章感兴趣: