接上篇get方式,本文介绍post方式与服务器通信。调用两种类来实现post。 一个与get方法一样调用Url与HttpUrlConnection类,利用输入输出流方式,利用ObjectInputStream()函数进行**对象**读写。 另一个利用HttpPost(url)与HttpResponse类来实现。 先介绍第一种,对象写入后台一本书的信息,book类(定义很简单)。 android客户端:记得**设置**相应参数(post)
     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://10.0.2.2:8080/ServerTest/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 = br.readLine();            //String line = "";            //while ((line = br.readLine()) != null) {            //  Log.d("TAG", "line is " + line);            //}//估计是为了确保读取全部信息            System.out.println("获得信息:"+line);            br.close();            connection.disconnect();        } catch (Exception e) {            System.out.println("错误信息:"+e.getMessage());            e.printStackTrace();        } finally {        }

服务器端:

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");//客户端接受为“android”            out.write("success!");//客户端接受为“android!”很神奇吧~~            out.flush();            out.close();        } catch (Exception e) {            e.printStackTrace();        } finally {            ois.close();        }    }    public void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {    }}

方法一总结:基本跟java中的socket通信完全一样,前台两行代码,new url ,getConnection,然后操作输入输出流。后台利用response,request获得输入输出流。
第二种方式直接利用HttpPost类,不需再另外设置post方法。使用org.apache.http.*的一些类实现编码和参数设置。

try{            HttpPost request=new HttpPost(URL);            List params=new ArrayList();            params.add(new BasicNameValuePair("username","lg"));            params.add(new BasicNameValuePair("password","123"));            request.setEntity(new UrlEncodedFormEntity(params,HTTP.UTF_8));            HttpResponse response=new DefaultHttpClient().execute(request);            String msg=EntityUtils.toString(response.getEntity());            System.out.println("返回消息:"+msg);        }catch(Exception e){            e.printStackTrace();        }

服务器端代码跟get方式的后台程序完成相同,只不过在doPost()方法实现。
方法二总结:利用NameValuePair类来设置类似java中map的方式来绑定键值数据,再利用Entity来设置实体传递对象。利用DefaultHttpClient类来实现联网操作,返回HttpResponse的数据体。
****************通信方式总结**********
这些天研究了socket和http通信的原理,发现正在联网传递的代码也就几行而已。socket中的输入输出流,web服务器端的request.getInputStream与response.getWriter操作。根据传输内容分简单字符串和类的实例等不同来调用不同的类。
实在是java关于网络传输的部分太不熟悉了,导致android通信部分学习的很慢。

更多相关文章

  1. android 按两次返回键强制退出整个APP
  2. Android存储路径解析
  3. 【Android(安卓)开发】 : Activity之间传递数据的几种方式
  4. android中的5个布局方式
  5. 深入了解android平台的jni(一)
  6. Android(安卓)线程 thread 两种实现方法!
  7. android滑动解锁
  8. android socket编程小demo
  9. Android(安卓)异步消息处理机制 让你深入理解 Looper、Handler、

随机推荐

  1. Android 中英文切换(点击按钮切换语言)
  2. Android跳转到系统设置界面
  3. Android静态安全检测 -> 敏感函数调用风
  4. Android的gradle中compile和provided的区
  5. CountDownTimer倒计时
  6. 整理的一些免费的Android项目实战系列视
  7. 2013.12.03(3) ——— android ActionbarSh
  8. adb使用持续更新
  9. Android写sys文件节点
  10. android sql 批量处理插入/修改/删除 操