文章目录
一般我们发送http请求时都会另外开一个线程使用异步的方法,但是存在子线程不能直接修改ui线程内容的问题,所以就要用到线程间的通信,最近刚刚接触这一方面的东西,于是写了一个功能非常简单发送Http请求的类,使用了Thread、Handler、HttpURLConnection来实现了http请求并将获取到的内容拿到UI线程中。在此记录一下。
一、封装Http请求
自定义线程类,通过继承Thread实现。
package com.example.school;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.util.Log;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
/**
* Created by Guanzhou·Chen on 2019/5/9.
*/
public class HttpTool extends Thread {
public static final int MODE_GET = 101;
public static final int MODE_POST = 102;
private int message_what;
private int current_mode;
private String str_url;
private String data = "";
private HashMap<String, String> param = new HashMap<String, String>();
private Handler handler;
/**
* @param MODL 选择POST或GET方式,HttpTool.MODE_GET / HttpTool.MODE_POST
* @param url 发送http请求的url,包括ip后的router
* @param message_what 使用Handler时,分辨消息的message.what
*/
HttpTool(int MODL, String url, int message_what, Handler handler) {
current_mode = MODL;
str_url = url;
this.message_what = message_what;
this.handler = handler;
}
/**
* 清空要发送的数据
*/
public void clearData() {
data = "";
param.clear();
}
/**
* @param key 要发送数据的key值
* @param value 要发送数据的value值
*/
public void addData(String key, String value) {
if (current_mode == MODE_GET) {
addGETData(key, value);
} else {
addPOSTData(key, value)