android利用post方式与web服务器通信
16lz
2021-01-24
接上篇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通信部分学习的很慢。
更多相关文章
- android 按两次返回键强制退出整个APP
- Android存储路径解析
- 【Android(安卓)开发】 : Activity之间传递数据的几种方式
- android中的5个布局方式
- 深入了解android平台的jni(一)
- Android(安卓)线程 thread 两种实现方法!
- android滑动解锁
- android socket编程小demo
- Android(安卓)异步消息处理机制 让你深入理解 Looper、Handler、