Android——使用http访问网络——使用HttpURLConnection
2022/9/14 23:18:41
本文主要是介绍Android——使用http访问网络——使用HttpURLConnection,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1.
在过去,Android上发送HTTP请求有一般两种方式:HttpURLConnection和HttpClient。不过在安卓6.0系统以后,HttpClient的功能已经被完全移除了。
所以本次只学习HttpURLConnection的用法。
①:获得HttpURLConnection的实例
URL url = new URL("https://www.baidu.com");
HttpURLConnection connection =(HttpURLConnection)url.openConnection();
②获取到实例后,可以设置一下HTTP请求所使用的方法。
GET:表示希望从服务器获得数据。该请求的数据会附在URL之后,通过?来拼接所传的参数,参数之间以&相连。
POST:表示提交数据给服务器。该请求的参数不是放在URL字符串里,而是放在HTTP请求的正文中,请求的数据被封装起来以流的形式发送给服务器。
一般默认的请求为GET。
connection.setRequestMethod("GET");
③接下来可以进行一些自由的定制了,常用属性如下:
connection.setConnectTimeout(); //设置连接超时时间
connection.setReadTimeout(); //设置读取超时时间
connection.setRequestProperty(); //设置请求头参数
connection.setDoOutput(); //设置是否向HttpURLConnection输出,对于POST请求,参数要放在http正文中,因此需要设为true,默认情况为false
connection.setDoInput(); //设置是否从HttpURLConnection读入,默认情况为true
④调用connect()连接远程资源
通过connect()方法就与服务器建立了Sockect连接,连接以后,连接属性就不可以再修改了。然后可以查询服务器返回的头信息了。
connection.getResponseCode();//获取服务器的响应代码,请求成功的代码一般为200.
connection.getResponseMessage();//获取服务器的响应消息
⑤调用getInputStream()方法获取服务器返回的输入流,然后对输入流进行读取。
InputStream input = connection.getInputStream(); //得到响应流
BufferedReader reader = new BufferedReader(new InputStreamReader(input));//构建BufferedReader对象
StringBuilder sb = new StringBuilder();//构建StringBuilder对象
String line = null;
while ((line=reader.readLine())!=null){ //读取输入流中的数据
sb.append(line);
}
⑥最后调用disconnect()方法将这个http关掉。
connection.disconnect();
⑦将请求到的服务器数据显示到界面上。
实战:
访问百度,并将返回的数据显示到屏幕上。
页面布局代码直接贴上来了:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".HttpActivity"> <Button android:id="@+id/btn_sendRequest" android:text="发送请求" android:layout_width="match_parent" android:layout_height="wrap_content" /> <ScrollView android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/responseText" android:layout_width="match_parent" android:layout_height="wrap_content"/> </ScrollView> </LinearLayout>
效果图如下:
我们需要点击”发送请求“按钮后,服务器返回的数据在下方显示出来。
以下为逻辑代码:
package com.kotlin.activitystudy; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.TextView; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import javax.net.ssl.HttpsURLConnection; public class HttpActivity extends AppCompatActivity { private Button btn_Request; private TextView responseText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_http); btn_Request = findViewById(R.id.btn_sendRequest); responseText = findViewById(R.id.responseText); btn_Request.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { sendRequestWithHttpURLConnection(); } }); } private void sendRequestWithHttpURLConnection(){ //开启线程发起网络请求 new Thread(new Runnable() { @Override public void run() { HttpURLConnection connection = null; try { URL url = new URL("https://www.baidu.com"); connection =(HttpURLConnection)url.openConnection(); //通过此方法创建的HttpURLConnection对象,并没有真正执行连接操作,只是创建了一个新的实例,在正式连接前,往往还需要设置一些属性,如连接超时和请求方式等 connection.setRequestMethod("GET"); //设置请求方式 connection.setConnectTimeout(8000);//设置连接超时时间 connection.setReadTimeout(8000);//设置读取超时时间 connection.connect();//连接远程资源 Log.d("httpActivity","服务器的响应代码==》"+connection.getResponseCode());//可查看响应代码是否为200,是则请求成功,否则请求失败 InputStream input = connection.getInputStream();//获取到服务器返回的响应流 BufferedReader reader = new BufferedReader(new InputStreamReader(input));//构建BufferedReader用于读取响应流 StringBuilder sb = new StringBuilder();//构建StringBuilder对象,用来接收BufferedReader中的数据 String line = null; while ((line=reader.readLine())!=null){ sb.append(line); } showResponse(sb.toString()); //调用showResponse方法,将StringBuilder中的内容显示到Activity中 } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally { connection.disconnect(); //关闭该http } } }).start(); } private void showResponse(String sb){ runOnUiThread(new Runnable() { //Android不允许在子线程中更新ui,这里使用异步消息处理机制中的工作原理更新ui @Override public void run() { responseText.setText(sb); } }); } }
运行结果如下:
okk,至此,我们通过HttpURLConnection的方法就拿到服务器返回的数据了。
这篇关于Android——使用http访问网络——使用HttpURLConnection的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享
- 2024-11-22ansible 的archive 参数是什么意思?-icode9专业技术文章分享
- 2024-11-22ansible 中怎么只用archive 排除某个目录?-icode9专业技术文章分享
- 2024-11-22exclude_path参数是什么作用?-icode9专业技术文章分享
- 2024-11-22微信开放平台第三方平台什么时候调用数据预拉取和数据周期性更新接口?-icode9专业技术文章分享
- 2024-11-22uniapp 实现聊天消息会话的列表功能怎么实现?-icode9专业技术文章分享
- 2024-11-22在Mac系统上将图片中的文字提取出来有哪些方法?-icode9专业技术文章分享
- 2024-11-22excel 表格中怎么固定一行显示不滚动?-icode9专业技术文章分享
- 2024-11-22怎么将 -rwxr-xr-x 修改为 drwxr-xr-x?-icode9专业技术文章分享
- 2024-11-22在Excel中怎么将小数向上取整到最接近的整数?-icode9专业技术文章分享