1、Get请求和Post请求简介

当客户端与服务器建立了网络链接之后,就可以发送Http请求了。Http请求通常分为Get请求和Post请求两种,下面分别介绍:

1.Get请求

Get:通过请求URI得到资源,一般用于获取/查询资源信息。

Get请求比较简单,只需要在指定的链接地址中,将需要传递的参数通过“?参数名=参数值”的格式进行传递,如果传递的参数不止一个,则需要使用英文半角的“,“将各个参数进行分隔。例如,要传递用户编号和用户名这两个参数,相应的参数传递格式为”http://192.168.1.162:8090/?id=1001,username=AQ".

2.Post请求

Post:用于向服务器提交新的内容。一般用于更新资源信息。

Get请求只能发送大小在1024B以内的数据,如果要发送数据量较大的请求,就需要使用Post请求。不同于Get请求的参数传递方式,Post请求将参数放在HTTP请求的实体内容中,如果需要传递的参数不止一个,则需要使用“&”将各个参数进行连接

相比于Get请求,Post请求的安全性较高,但是速度较慢

2、通过HTTP访问网络

在Android应用程序中,通过HTTP访问网络的方式主要有HttpURLConnection和HttpCient两种,下面介绍二者的基本功能和用法。

2.1、利用HttpURLConnection访问网络

2.1.1.HttpURLConnection简介

HttpURLConnection是一种多用途、轻量级的HTTP客户端,使用它来进行HTTP操作,可以适用于大多数的应用程序。

HttpURLConnection是java的标准类,继承自URLConnection抽象类,无法直接实例化对象,通过调用openCollection()方法获得对象实例。可以通过Get方式或者Post方式,向指定的网络发送HTTP请求和获取HTTP响应。

2.1.2.HttpURLConnection用法

利用HttpURLConnection发送请求及接收响应,一般可分为一下几个步骤。

(1)创建一个URL对象,基本用法代码如下:

URL urlConn = new URL(http://www.163.com);

(2) 调用URL对象的openConnection()来获取HttpURLConnection对象实例,基本用法代码如下:

HttpURLConnection urlConn = (HttpURLConnection)url.openConnection();

(3)调用getInputStream()方法获得服务器返回的输入流,基本用法代码如下:

InputStream in = conn.getInputStream();

(4)读取并处理(解码)服务器返回的输入流

 bitmap = BitmapFactory.decodeStream(in);

(5)调用disconnect()方法关闭HTTP链接,基本用法代码如下:

 conn.disconnect();

示例

开发一个Android应用程序,利用HttpURLConnection发送Get请求,从本地或者web服务器中下载图片

XML布局代码如下:

​
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:gravity="center"android:orientation="vertical"><TextViewandroid:id="@+id/textView1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="下载并显示一张网络图片"/>
​<ImageViewandroid:id="@+id/imageView1"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_weight="0.8" />
​<Buttonandroid:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="开始下载"/>
</LinearLayout>​

打开MainActivity.java文件,重写其中的onCreate()方法及其其他对应方法,并将此前选择的网络图片的URL编入其中,具体代码如下:

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
​
import com.aaa.httpurldemo.R;
​
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.io.IOException;
​
public class MainActivity extends AppCompatActivity {Button visitWebBtn = null;Button button1 = null;TextView textView1 = null;ImageView imageView1 = null;
​@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);imageView1 = (ImageView)findViewById(R.id.imageView1);button1 = (Button)findViewById(R.id.button1);//创建下载图片按钮的点击事件监听器button1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//TODO Auto-generated method stubString imgUrl;//某个现有网络web服务器上的图片imgUrl = "https://img0.baidu.com/it/u=2862534777,914942650&fm=253&fmt=auto&app=138&f=JPEG?w=889&h=500";//自建web服务器上的图片URL//imgUrl = "http://192.168.1.128:8086/house.png";new DownImgAsyncTask().execute(imgUrl);}});}//从指定的URL中获取图片private Bitmap getImageBitmap(String url){URL imgUrl = null;Bitmap bitmap = null;try{//1.创建一个URL对象imgUrl = new URL(url);//2.获取HttpURLConnection对象实例HttpURLConnection conn = (HttpURLConnection)imgUrl.openConnection();conn.setDoInput(true);conn.connect();//3.获得服务器返回的输入流InputStream is = conn.getInputStream();//4.解码数据流bitmap = BitmapFactory.decodeStream(is);is.close();//5.断开连接conn.disconnect();}catch (MalformedURLException e){
​Toast.makeText(this,"图片下载失败,请确定网络图片是否存在",Toast.LENGTH_LONG).show();} catch (IOException e) {Toast.makeText(this,"图片下载失败,请确定网络服务是否正常",Toast.LENGTH_LONG).show();}return bitmap;}//利用异步任务机制下载图片class DownImgAsyncTask extends AsyncTask<String,Void,Bitmap> {@Overrideprotected void onPreExecute() {super.onPreExecute();imageView1.setImageBitmap(null);}
​@Overrideprotected Bitmap doInBackground(String... params) {Bitmap b = getImageBitmap(params[0]);return b;}
​@Overrideprotected void onPostExecute(Bitmap result){super.onPostExecute(result);if(result!=null){imageView1.setImageBitmap(result);}}}
}
​

在AndroidManifest.xml文件的application节点之前添加相应的权限,以获得访问互联网的许可,具体代码如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.aaa.httpurldemo"><!--注册网络访问权限--><uses-permission android:name="android.permission.INTERNET"/><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme"><activityandroid:name="zut.edu.httpurldemo.MainActivity"android:exported="true"><intent-filter><action android:name="android.intent.action.MAIN" />
​<category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application>
​
</manifest>

运行即可。

2.2、利用HttpClient访问网络

2.2.1.HttpClient简介

一般情况下,如果只是需要向web站点的某个简单页面提交请求并获取服务器响应,HttpURLConnection是完全可以胜任的,但多数情况下,web站点的网页可能并不是通过一个简单的URL就可以访问,而是需要用户登录并且具有相应的权限才可以访问该页面,这就涉及Session和Cookie等相关数据的处理,如果是利用HttpURLConnection来实现这种网络访问,程序的设计就会比较烦琐。

Apache开源组织提供了一个HttpClient项目,由其名称可见,它是一个简单的Http客户端(并不是浏览器),是一个增强版的HttpURLConnection,可以用于发送HTTP请求和接收HTTP响应。由于Android已经成功地集成了HttpClient,所以在Android应用程序中,使用HttpClient发送请求和接收响应更简单一些。

2.2.2.HttpClient用法

利用HttpClient发送请求及接收响应,一般可以分为以下几个步骤。

(1)创建代表客户端的HttpClient对象。

(2)创建代表请求的对象,如果需要发送Get请求,则创建HttpGet对象;如果需要发送Post对象,则创建HttpPost对象。

附加步骤:如果需要发送请求参数,Get方式可以使用拼接字符串的方式,把参数拼接在结尾;Post方式需要使用setEntity()方式来设置请求参数。

(3)调用HttpClient对象的execute()方法发送请求,执行该方法后,将获得服务器返回的HttpResponse对象。服务器返回的数据就在这个HttpResponse响应中。

(4)检查相应状态是否正常。服务器发给客户端的响应中应有一个响应码。

200表示“正常”,此时,调用HttpResponse的getEntity()方法就可以获取服务器的响应头和响应内容等。

404表示“客户端错误”

505表示“服务器端错误”

(5)调用disconnect()关闭HTTP链接,基本用法代码如下:

urlConn.disconnect();

Android学习:访问网络相关推荐

  1. Android 如何访问网络

    Android 如何访问网络 MainActivity代码块 Layout代码块 主界面图片: 运行结果: MainActivity代码块 一.绑定定控件,然后通过点击按钮获取url,由于打开url获 ...

  2. android多线程访问网络,Android Day05-网络编程之文件下载之多线程断点续传技术

    文件下载之多线程断点续传技术底层实现 通过HttpURLConnection连接 断点续传核心步骤: 1.UI设计 2.获取服务器文件的大小,通过连接的一个方法getContentLength()来得 ...

  3. Android之访问网络,使用HttpURLConnection还是HttpClient?

    <span style="font-family: Arial; font-size: 14px; background-color: rgb(255, 255, 255);" ...

  4. Android多媒体学习六:访问网络上的Audio对应的M3U文件,实现网络音频流的播放

    Android中提供了对网络上流媒体的支持,我们可以使用MediaPlayer类来播放一个网络上的音频文件. 但是网络上的站点并不建议我们直接访问流,我们需要获取他提供的M3U文件,根据M3U文件来实 ...

  5. Android学习笔记第五篇--网络连接与云服务(一)

    Android学习笔记第五篇–网络连接与云服务 第一章.无线连接设备 ​ 除了能够在云端通讯,Android的无线API也允许在同一局域网内的设备通讯,**甚至没有连接网络,而是物理具体相近,也可以相 ...

  6. android访问网络的方法,Android Http协议访问网络实例(3种)

    之前关于Android Http协议访问网络的一点分析,最近需要回顾,就顺便发到随笔上了 Android中http连接主要是为了获取网络数据,目前了解的有3种方法: Httpconnection -- ...

  7. Android学习笔记-Wifi网络操作

    Wifi网卡状态 WIFI_STATE_DISABLED Wifi网卡不可用 WIFI_STATE_DIABLING Wifi网卡正在关闭 WIFI_STATE_ENABLED Wifi网卡可用 WI ...

  8. 解决android模拟器不能访问网络的问题

    解决android模拟器不能访问网络的问题 参考文章: (1)解决android模拟器不能访问网络的问题 (2)https://www.cnblogs.com/oriental/p/11750330. ...

  9. Android模拟器访问pc与网络的问题

    1. 模拟器(m)访问本机pc *:m访问本地pc时 本地服务地址为localhost  在m中要替代为10.0.2.2: *:或者直接用本地IP 要区别pc上的ip和android里面的ip,用an ...

最新文章

  1. java中对Excel的创建、样式修改
  2. 约瑟夫生死环游戏c语言程序,使用C++实现的约瑟夫生死游戏
  3. 5-5 表格输出 (5分)
  4. 【12】 全国外电音DJ 3000首 32G
  5. 全球芯片厂商今年设备支出将再增10% 超过980亿美元
  6. 零信任风口来了,新一代企业安全架构革新势在必行
  7. 你真的需要全栈开发吗?
  8. CSS 之怀疑自己的审美 1 (Day49)
  9. 商业数据分析的层次与步骤有哪些
  10. IMSettings 1.5.1 发布,输入法设置工具
  11. 购买了正版的supermemo 15,花了60$
  12. 学而思初中全套网课+讲义【春季班,暑假班,秋季班,寒假班】
  13. MYSQL可重复读及原理、快照读和当前读
  14. 传统零售业务分析指标整理
  15. 「实战篇」开源项目docker化运维部署-前端java部署(八)
  16. 2020版本idea 左视图跟随主视图定位操作
  17. 想瘦身不伤体质,就要学会和脂肪做朋友
  18. 99mTc-MIBI类毕业论文文献都有哪些?
  19. pandas小节 索引,排序
  20. 大数据学习笔记-------------------(17_3)

热门文章

  1. [VB.NET源码]销售管理系统
  2. Linux初窥:CentOS配置本地yum源与网络yum源
  3. kubectl 命令使用(create系列)
  4. 10个WordPress电商产品页面扩展功能
  5. 乌班图linux分辨率不能调,ubuntu分辨率1024*768无法选择解决方法
  6. oracle自来水boss建表语句,SQL语句(建库、建表、修改语句)
  7. 你为什么要学习这门专栏?
  8. PHP phpoffice/phpspreadsheet导出excel
  9. 动态生成模板(模板生成器)
  10. Win7设置定时自动执行程序或脚本