Android简易OkHttp封装

一个简易的OkHttp封装

在android程序中,通常为了保证软件重要数据的实时性和我们数据的安全性,我们通常采用的方式是通过网络,从服务端去获取、修改我们的数据,而这就需要用到我们的HTTP数据请求。

目前最常见的两种请求分别是谷歌自己的HttpURLConnection,以及我认为目前最好用的请求框架OkHttp,而下面我带来的就是一个基于OkHttp框架的简易封装。

需要用到的第三方库

在开始编写代码之前展示出要使用到的库,以及这些库在以下代码中的作用
导入库图片

  • Gson 将Map<>类型的参数转换为json格式的数据
  • okhttp 请求实现类
  • okio okhttp请求的通信基础

封装

public class OkHttp_Fz extends Thread{
	private URL url;//请求地址
	private Handler handler;//一个Handler对象,用于线程间的回调
	private Map<String,String> parameter;//post请求需要使用到的参数

	private boolean isLoop;//设置循环请求(同时可以通过设置该变量达到停止循环请求)
	private boolean loopTime;//设置循环的间隔时间
	public OkHttp_Fz(Handler handler,String URL){
		this.handler = handler;
		try{
			this.url = new URL(URL);//将字符串形式的请求地址参数转换为URL类型
		}catch(MalformedURLException e){
			e.printStackTrace();
		}
	}
	/**
	*设置post请求的参数
	*@param parameter 接收到的参数数据
	*/
	public void setParameter(Map<String,String> parameter){
		this.parameter = parmeter;
	}
	public void run(){
		super.run();
		//使用do...while();设置循环请求(至少请求一次)
		do{
			//调用网络请求的方法进行网络数据请求
			String data = Request_();
			//判断请求后的数据是否为空
			if(data.isEmpty()){
				message(-1,"未请求到数据");
			}else{
				message(1,data);//请求到数据,将请求到的数据返回到调用线程中
			}
			//通过暂停线程来达到循环请求延时
			if(isLoop){
				try{
					Thread.sleep(loopTime);
				}catch(InterruptedException e){
					e.printStackTrace();
				}
			}
		}while(isLoop);
	}
	/**
	*进行网络请求的方法
	*/
	private String Request_(){
		OkHttpClient client = new OkHttpClient();
		Request request;
		//判断参数变量是否为空,根据判断结果判断要使用什么请求方式
		if(parameter != null){
		
			//post请求
			
			String parem = new Gson().toJson(parmeter);//将Map<>形式的请求参数转换为JSON形式
			RequestBody body = FormBody.create(MediaType.parse("application/json"),parem);//将json格式的字符串参数转换为json数据
			request = new Request.Builder()
						.url(url)
						.post(body)
						.build();
		}else{
			
			//get请求
			
			request = new Request.Builder()
						.url(url)
						.build();
		}
		try{
			Response response = client.newCall(request).execute();//通过OkHttpClient函数提交请求,并返回请求数据
			return response.body().string();
		}catch(IOException e){
			e.printStackTrace();
		}
		return "";
	}
	/**
     * 用于回调消息的方法
     * @param what 消息的键
     * @param obj 消息的具体内容
     */
	private void message(int what,Object obj){
		Message message = Message.obtain();
		message.what = what;
		message.obj = obj;
		handler.dispatchMessage(message);
	}
}

使用方法
OkHttp请求封装完之后我们只需要在传入指定参数,调用该类即可

package com.example.OkHttp_lx;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.HashMap;
import java.util.Map;

public class MainActivity extends AppCompatActivity {
    private String URL = "http://";//请求的地址参数
    private Map<String,String> parmeny = new HashMap<>();//post请求的参数
    
    //用于回调的Handler对象
    //通过重写该类的handlerMessage方法处理回调的消息
    private Handler handler = new Handler(){
        @Override
        public void handleMessage(@NonNull Message msg) {
            super.handleMessage(msg);
            switch(msg.what){
                case -1:
                    Log.e("-1",msg.obj.toString());
                    break;
                case 1:
                    Log.e("1",msg.obj.toString());
                    break;
            }
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

		//get请求
		OkHttp_Fz conntion = new OkHttp_Fz (handler,URL);//传入Handler对象和请求地址参数
        conntion.start();

		//post请求
        OkHttp_Fz conntion = new OkHttp_Fz (handler,URL);//传入Handler对象和请求地址参数
        conntion.setParameter(parmeny);//通过调用OkHttp_Fz中的setParameter方法设置请求参数
        conntion.start();
    }
}

最后,简易的OkHttp请求封装到此结束。

本人第一次写博客,若有不对之处,还望指正,万分感谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值