本文实例讲述了Android开发使用URLConnection进行网络编程。分享给大家供大家参考,具体如下:
URL的openConnection()方法将返回一个URLConnection,该对象表示应用程序和URL之间的通信连接,程序可以通过URLConnection实例向该URL发送请求,读取URL引用的资源。通常创建一个和URL的连接,并发送请求,读取此URL引用的资源。
需要如下步骤:
a)通过调用URL对象openConnection()方法来创建URLConnection对象
b)设置URLConnection的参数和普通请求属性
conn.setRequestProperty("accept","*/*"); conn.setRequestProperty("connection","Keep-Alive"); conn.setRequestProperty("user-agent","Mozilla/4.0(compatible;MSIE 6.0;Windows NT 5.1;SV1)"); conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
发送POST请求必须设置如下两行
conn.setDoInput(true):设置该URLConnection的doInput请求头字段的值
coon.setDoOutput(true):
c)调用connect():打开到此URL引用的资源的通信链接(如果尚未建立这样的连接)。
如果在已打开连接(此时 connected 字段的值为 true)的情况下调用 connect 方法,则忽略该调用.
URLConnection 对象经历两个阶段:首先创建对象,然后建立连接。
在创建对象之后,建立连接之前,可指定各种选项(例如doInput和UseCaches).连接后再进行设置就会发生错误。连接后才能进行的操作(例如getContentLength),如有必要,将隐式执行连接.
d)如果只是发送GET方式请求,使用connect方法建立和远程资源之间的实际连接即可,在请求的地址中传入数据。
如果需要发送Post方法请求。需要获取URLConnection实例对应的输出流来发送请求参数,
PrintWriter out=new PrintWriter(conn.getOutputStream()); //解决乱码问题 String n=EncodingUtils.getString("张三".getBytes(),"UTF-8"); out.write("name="+n+"&pwd="+pwd); out.flush();//刷新输出流的缓冲
e)远程资源变为可用,程序可以访问远程资源的头字段或通过输入流读取远程资源的数据。
getInputStream()获取输入流。
从输入流读取response的数据。
注意:
1)如果既要使用输入流读取URLConnection响应的内容,也要使用输出流发送请求参数,一定要先使用输出流,再使用输入流。
2)借助于URLConnection类的帮助,应用程序可以非常方便地与指定站点交换信息,包括发送GET请求,POST请求,并获取网站的响应等。
代码编写步骤如下:
1.先写一个服务器-web工程
新建一个Servlet--LoginServlet,简单实现用户的登录~
@WebServlet("/LoginServlet") public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; public LoginServlet() { // TODO Auto-generated constructor stub } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub String name=request.getParameter("name"); String pwd=request.getParameter("pwd"); System.out.println(name+" "+pwd); OutputStream os=response.getOutputStream(); if("xuxu".equals(name)&&"123".equals(pwd)){ os.write(("成功").getBytes("UTF-8")); }else{ os.write(("失败").getBytes("UTF-8")); } os.flush(); os.close(); } }
2.新建一个android项目,在MainActivity中分别使用get方法和post方法实现用户的登录
public class MainActivity extends Activity { private EditText name,pwd; public void get(View view){ new Thread(){ public void run() { try { URL url=new URL("http://169.254.244.141:8090/ConnectionServlet/LoginServlet"+ "?name="+name+"&pwd="+pwd); URLConnection conn=url.openConnection(); conn.connect();//真正的建立网络连接 BufferedReader reader=new BufferedReader(new InputStreamReader(conn.getInputStream())); String line=null; StringBuffer stringBuffer=new StringBuffer();//字符串,都可以存储和操作字符串,它是变量 while ((line=reader.readLine())!=null) { stringBuffer.append(line); } System.out.println(stringBuffer.toString()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }; }.start(); } public void post(View view){ new Thread(){ public void run() { try { URL url=new URL("http://169.254.244.141:8090/ConnectionServlet/LoginServlet" ); URLConnection conn=url.openConnection(); //必须设置 conn.setDoInput(true); conn.setDoOutput(true); conn.connect();//真正的建立网络连接 PrintWriter printWriter=new PrintWriter(conn.getOutputStream()); printWriter.write("name="+name+"&pwd="+pwd); printWriter.flush(); printWriter.close(); BufferedReader reader=new BufferedReader(new InputStreamReader(conn.getInputStream())); String line=null; StringBuffer stringBuffer=new StringBuffer(); while ((line=reader.readLine())!=null) { stringBuffer.append(line); } System.out.println(stringBuffer.toString()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }; }.start(); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); name=(EditText) findViewById(R.id.name); pwd=(EditText) findViewById(R.id.pwd); } }
3.运行,把Tomcat打开~
效果图如下:
附:完整实例代码点击此处本站下载。
更多关于Android相关内容感兴趣的读者可查看本站专题:《Android通信方式总结》、《Android开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android多媒体操作技巧汇总(音频,视频,录音等)》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》
希望本文所述对大家Android程序设计有所帮助。
本文向大家介绍Android开发使用HttpURLConnection进行网络编程详解【附源码下载】,包括了Android开发使用HttpURLConnection进行网络编程详解【附源码下载】的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android开发使用HttpURLConnection进行网络编程。分享给大家供大家参考,具体如下: ——HttpURLConnection URL
问题内容: 我在使用时遇到了麻烦,因为我之前从未见过它,也不知道我在用它做什么。 基本上,我正在关闭部队,因为我试图在主类上运行连接。有人可以帮我添加代码吗: 问题答案: 只是一个简单的例子,它看起来像:
本文向大家介绍Android编程开发之NotiFication用法详解,包括了Android编程开发之NotiFication用法详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android编程开发之NotiFication用法。分享给大家供大家参考,具体如下: notification就是通知的意思,安卓中指通知栏,一般用在电话,短信,邮件,闹钟铃声,在手机的状态栏上就会出现一个小
本文向大家介绍详解Python Socket网络编程,包括了详解Python Socket网络编程的使用技巧和注意事项,需要的朋友参考一下 Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页、QQ 聊天、收发 email 等等。要解决网络上两台主机之间的进程
本文向大家介绍C#网络编程基础之进程和线程详解,包括了C#网络编程基础之进程和线程详解的使用技巧和注意事项,需要的朋友参考一下 在C#的网络编程中,进程和线程是必备的基础知识,同时也是一个重点,所以我们要好好的掌握一下。 一:概念 首先我们要知道什么是”进程”,什么是“线程”,好,查一下baike。 进程:是一个具有一定独立功能的程序关于某个数据集合的一次活动。它是操作系统动态执行的基本单元, 在
本文向大家介绍python网络编程 使用UDP、TCP协议收发信息详解,包括了python网络编程 使用UDP、TCP协议收发信息详解的使用技巧和注意事项,需要的朋友参考一下 UDP UDP是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送。 UDP传输数据时有大小限制,每个被传输的数据报必须限定在64KB之内。 UDP是一个不可靠的协议,发送