android post请求url,Android 执行 HTTP POST 请求

该博客内容展示了如何在Android中使用AsyncTask类进行POST请求。通过创建一个内部类AsyncPostHttp,实现了发送POST请求到指定URL(如百度),设置请求头,编码并发送参数,然后读取响应数据。主要涉及HttpURLConnection的使用,包括设置连接和读取超时、输出流和输入流的管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

与之前的 GET 请求类似,大的区别是传入的参数和输出流:import androidx.appcompat.app.AppCompatActivity;

import android.os.AsyncTask;

import android.os.Bundle;

import android.widget.TextView;

import java.io.BufferedReader;

import java.io.DataOutputStream;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.net.HttpURLConnection;

import java.net.URL;

import java.net.URLEncoder;

public class MainActivity extends AppCompatActivity {

TextView textView1;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

textView1 = findViewById(R.id.textView1);

AsyncPostHttp task_post = new AsyncPostHttp();

task_post.execute("https://www.baidu.com", "text");

}

class AsyncPostHttp extends AsyncTask {

HttpURLConnection connection = null;

BufferedReader reader = null;

@Override

protected void onPreExecute() {

// 任务刚开始的时候执行

}

@Override

protected String doInBackground(String... params) {

try {

URL url = new URL(params[0]);

connection = (HttpURLConnection) url.openConnection();

// 设置需要输出内容的标识,如果需要传递给服务器表单数据,那么此项需为 true

connection.setDoOutput(true);

// 不使用缓存

connection.setUseCaches(false);

// 设置 RequestHeader 与 HTTP 的请求方式

connection.setRequestProperty("content-type", "application/x-www-form-urlencoded");

connection.setRequestMethod("POST");

// 应该指的是与服务器建立连接的最大时间

connection.setConnectTimeout(1000);

// 读取数据的最大时间,这个不要设置得太短,不然会很容易出现超时的异常

connection.setReadTimeout(6000);

// 使用 DataOutputStream 进行输出操作

DataOutputStream output = new DataOutputStream(connection.getOutputStream());

// 传输的内容格式就如同 URL 的规范一样(a=1&b=2),最好进行一次 URL 编码操作

String content = "param1=" + URLEncoder.encode(params[1], "utf-8");

output.writeBytes(content);

// 输出完记得关

output.flush();

output.close();

// 如果不是正常的请求结果则抛出异常,注意获取结果的步骤一定要在请求内容给完之后

if (connection.getResponseCode() != 200) {

throw new Exception(connection.getResponseCode() + "," + connection.getResponseMessage());

}

// 使用 InputStream 进行接收操作

InputStream input = connection.getInputStream();

reader = new BufferedReader(new InputStreamReader(input));

StringBuilder response = new StringBuilder();

// 这里把 reader 中的内容一行行地读取到 response 中

String line;

while ((line = reader.readLine()) != null) {

response.append(line);

}

// 返回最终的结果

return response.toString();

} catch (Exception ex) {

// 返回错误消息

return "Http error: " + ex.getMessage();

} finally {

// 请求结束后释放资源

if (reader != null) {

try {

reader.close();

} catch (Exception ex) {

ex.printStackTrace();

}

}

if (connection != null) {

connection.disconnect();

}

}

}

@Override

protected void onProgressUpdate(Float... progresses) {

// 处理进度报告

}

@Override

protected void onPostExecute(String result) {

// 任务完成就会到此

textView1.setText(result);

}

@Override

protected void onCancelled() {

// 主动取消任务

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值