AndroidStudio网络请求——Get请求&Post请求
来源:互联网 发布:淘宝的彪马官方旗舰店 编辑:程序博客网 时间:2024/06/05 23:51
1.URL请求的类别:
分为二类,GET与POST请求。
二者的区别在于:
1:) get请求可以获取静态页面,也可以把参数放在URL字串后面,传递给servlet,
2:) post与get的不同之处在于post的参数不是放在URL字串里面,而是放在http请求的正文内。
[协议://] <域名|IP地址>[: 端口号] [/资源相对路径][?参数名=参数值][&参数名=参数值]……
Get请求:获取数据时用。(URL的长度是有限制的)
区分是不是get请求,看?那一块(在地址栏看见?就是get请求)
Post请求:放置在HTML Header内提交,URL中看不到数据的内容,比get请求安全,并且不受URL长度的限制(增删改查时用) 在地址栏看不见
HttpActivity代码:
public class HttpActivity extends AppCompatActivity { private Button search; private Button search1; private TextView show; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_http); search = (Button) findViewById(R.id.search); search1 = (Button) findViewById(R.id.search1); show = (TextView) findViewById(R.id.show); search.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //url是要访问的地址 Android是一个单线程系统 //访问线程不能写在UI线程里面 //cmd+ipconfig看自己的ip(192.168.1.31) 手机和电脑必须在同一个网段内 String url = "http://192.168.1.31:8080/HttpTest/index.jsp" + "?option=getUser&uName=jerehedu"; new MyGetJob().execute(url); } }); search1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String[] arg = new String[2]; arg[0] = "http://192.168.1.31:8080/HttpTest/index.jsp"; arg[1] = "option=getUser&uName=jerehedu"; new MyPostJob().execute(arg); } }); } public class MyPostJob extends AsyncTask<String, Void, String> { @Override protected String doInBackground(String... params) { HttpURLConnection con = null; //拿数据 InputStream is = null; StringBuilder sbd = new StringBuilder(); try { //将url转变为URL类对象 URL url = new URL(params[0]); //打开URL连接 con = (HttpURLConnection) url.openConnection(); con.setConnectTimeout(5 * 1000); con.setReadTimeout(5 * 1000); // 设定请求的方法为"POST",默认是GET con.setRequestMethod("POST"); // 设置是否从httpUrlConnection读入,默认情况下是true; con.setDoInput(true); // 设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在 // http正文内,因此需要设为true, 默认情况下是false; con.setDoOutput(true); // Post 请求不能使用缓存 con.setUseCaches(false); //转码 防止乱码 con.setRequestProperty("charset", "UTF-8"); // 窗体数据被编码为 名称/值对 标准编码格式 con.setRequestProperty("Content-type", "application/x-www-form-urlencoded"); //往后台写参数 第一个传进来的是地址 //strings应该是这样的样式=>option=getUser&uName=jerehedu String strings = params[1]; OutputStream os = con.getOutputStream(); // 向对象输出流写出数据,这些数据将存到内存缓冲区中 os.write(strings.getBytes()); // 刷新对象输出流,将任何字节都写入潜在的流中(些处为ObjectOutputStream) os.flush(); // 关闭流对象。此时,不能再向对象输出流写入任何数据,先前写入的数据存在于内存缓冲区中, // 在调用下边的getInputStream()函数时才把准备好的http请求正式发送到服务器 os.close(); if (con.getResponseCode() == 200) { is = con.getInputStream(); int next = 0; byte[] b = new byte[1024]; while ((next = is.read(b)) > 0) { sbd.append(new String(b, 0, next)); } } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (is != null) { try { is.close(); } catch (IOException e) { e.printStackTrace(); } } if (con != null) { con.disconnect(); } } return sbd.toString(); } @Override protected void onPostExecute(String s) { super.onPostExecute(s); show.setText("POST请求结果" + s); } } /** * AsyncTask异步任务类 * 异步任务类的参数: * 异步任务类的第一个参数会传到doInBackground方法中 * 第三个参数 * #指定doInBackground方法的返回值 * #doInBackground方法的返回值会被onPostExecute接收 */ public class MyGetJob extends AsyncTask<String, Void, String> { //onPreExecute在主线程中执行命令 通常做进度条的初始化 @Override protected void onPreExecute() { super.onPreExecute(); } //doInBackground在子线程中执行命令(耗时操作写在这里) @Override protected String doInBackground(String... params) { //因为要抛异常 所以置为空 // HttpURLConnection用这个可以访问网络 在清单文件中打开访问网络的权限 HttpURLConnection con = null; //流 InputStream is = null; StringBuilder sbd = new StringBuilder(); try { URL url = new URL(params[0]); con = (HttpURLConnection) url.openConnection(); //设置连接超时时间 con.setConnectTimeout(5 * 1000); //设置读取超时时间 con.setReadTimeout(5 * 1000); /** * http响应码 * 200:成功 404:未找到 500:发生错误 */ if (con.getResponseCode() == 200) { // 读取网页内容(字符串流) is = con.getInputStream(); int next = 0; byte[] bt = new byte[1024]; while ((next = is.read(bt)) > 0) { sbd.append(new String(bt, 0, next)); } } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (is != null) { try { //关闭 is.close(); } catch (IOException e) { e.printStackTrace(); } } if (con != null) { //断开连接 con.disconnect(); } } return sbd.toString(); } //执行完doInBackground后返回结果的位置 //String s是结果 对应doInBackground里的第三个参数 //onPostExecute 在UI线程(主线程)中执行命令 @Override protected void onPostExecute(String s) { super.onPostExecute(s); //返回显示结果 show.setText(s); } }}
activity_http 布局文件:
<?xml version="1.0" encoding="utf-8"?><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" tools:context="com.example.dell.jreduch07.HttpActivity"><LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/ll1" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tv" android:textSize="20sp" android:layout_weight="1" android:layout_marginLeft="5dp" android:text="姓名" /> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="5" android:hint="请输入要查找的姓名" android:id="@+id/et"/></LinearLayout> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/search" android:text="查询(GET方式)" android:layout_below="@+id/ll1" android:layout_alignStart="@+id/search1" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/search1" android:text="查询(POST方式)" android:layout_below="@+id/search" android:layout_centerHorizontal="true" /> <TextView android:layout_width="match_parent" android:layout_height="100dp" android:background="#b9e7e18e" android:layout_below="@+id/search1" android:id="@+id/show" android:layout_marginLeft="5dp" android:text="查询结果"/></RelativeLayout>
1 0
- AndroidStudio网络请求——Get请求&Post请求
- 简单网络请求/GET请求/POST请求
- Android——网络 GET请求+POST请求
- OKHttp网络请求——get、post请求
- iOS开发网络篇—GET请求和POST请求
- iOS开发网络篇—GET请求和POST请求
- IOS开发—网络请求之GET/POST同步请求
- iOS开发网络篇—GET请求和POST请求
- iOS开发网络篇—GET请求和POST请求
- iOS开发网络—04GET请求和POST请求
- iOS开发网络篇—GET请求和POST请求
- iOS开发网络篇—GET请求和POST请求
- iOS开发网络篇—GET请求和POST请求
- iOS开发网络篇—GET请求和POST请求
- iOS开发网络篇—GET请求和POST请求
- iOS开发网络篇—GET请求和POST请求
- iOS开发网络篇—GET请求和POST请求
- iOS开发网络篇—GET请求和POST请求
- 判断二叉树是否同构
- hdoj1203I NEED A OFFER!(01背包变形)
- C#的第16节课
- MongoDB小结35 - 聚合管道【$sort】
- 【HDU 杭电 1051 Wooden Sticks 】
- AndroidStudio网络请求——Get请求&Post请求
- java简介
- 数据结构实验之排序一:一趟快排
- 94. Binary Tree Inorder Traversal
- Effective C++笔记(1)
- Redis队列——PHP操作简单示例
- CSS书写规范、顺序(设计达人)
- eclipse快捷键汇总
- 项目方案