GET、POST请求封装类

okHttp3封装Get、Postff调用,使用之前先加入okHttp3的依赖:

implementation 'com.squareup.okhttp3:okhttp:3.4.1' //okhttp3

然后在AndroidManifest.xml中加入网络权限

<uses-permission android:name="android.permission.INTERNET" />

 okHttp3的封装类:

package com.example.recycleview2.http;
import android.util.Log;

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

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Cookie;
import okhttp3.CookieJar;
import okhttp3.Headers;
import okhttp3.HttpUrl;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

public class OkHttp {

    private static MediaType mediaType;

    public static String cookieTest = ""; //Cookie

    //登录
    public static void Login(final String url, String number, String password, Callback callback){
        final HashMap<String, List<Cookie>> cookie = new HashMap<>();
        CookieJar cookieJar = new CookieJar() {
            @Override
            public void saveFromResponse(HttpUrl url, List<Cookie> cookies) {
                cookie.put(url.host(),cookies);
            }

            @Override
            public List<Cookie> loadForRequest(HttpUrl url) {
                List<Cookie> cookies = cookie.get(url.host());
                return cookies != null ? cookies : new ArrayList<Cookie>();
            }
        };
        try {
            final OkHttpClient client = new OkHttpClient.Builder().cookieJar(cookieJar).build();
            JSONObject jsonObject =new JSONObject();
            jsonObject.put("number",number.toString());
            jsonObject.put("password",password.toString());
            mediaType = MediaType.parse("application/json;charset=utf-8");
            RequestBody requestBody = RequestBody.create(mediaType,jsonObject.toString());
            final Request request = new Request.Builder().url(url).post(requestBody).build();
            //保存Cookie登录
            client.newCall(request).enqueue(new Callback() {
                @Override
                public void onFailure(Call call, IOException e) {

                }

                @Override
                public void onResponse(Call call, Response response) throws IOException {
                    if(response.code() == 200){
                        Headers headers = response.headers();
                        HttpUrl loginUrl = request.url();
                        List<Cookie> cookies = Cookie.parseAll(loginUrl,headers);
                        if(!cookies.isEmpty()){
                            Log.d("Cookies:",cookies + "");
                            client.cookieJar().saveFromResponse(loginUrl,cookies);
                        }
                        StringBuilder cookieStr = new StringBuilder();
                        List<Cookie> cookies1 = client.cookieJar().loadForRequest(request.url());
                        for (Cookie cookie : cookies){
                            cookieStr.append(cookie.name()).append("=").append(cookie.value() + ";");
                        }
                        Log.d("响应状态:","成功");
                        cookieTest = cookieStr.toString();
                    }
                }
            });
            client.newCall(request).enqueue(callback); //返回给调用Login的数据
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

    //get请求,传参 不需要cookie
    public static void GetBiographyValue(String url, String name, String value, Callback callback){
        OkHttpClient client = new OkHttpClient();
        Request.Builder builder = new Request.Builder();
        HttpUrl.Builder urlBuilder = HttpUrl.parse(url).newBuilder();
        urlBuilder.addQueryParameter(name,value);
        builder.url(urlBuilder.build());
        Request request = builder.build();
        client.newCall(request).enqueue(callback);
    }

    //get请求,不需传参 需传cookie
    public static void GetCookieValue(String url, String Cookie, Callback callback){
        OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder().url(url)
                .header("Cookie",Cookie)
                .get().build();
        client.newCall(request).enqueue(callback);
    }

    //post请求,传参 需要cookie
    public static void PostBiographyCookieValue(String url, String imgUri, String Cookie, Callback callback){
        try {
            OkHttpClient client = new OkHttpClient();
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("uri", imgUri);
            jsonObject.put("type", "multipart/form-data");
            jsonObject.put("name", "image.jpg");
            MediaType mediaType = MediaType.parse("application/json; charset=utf-8");
            RequestBody requestBody = RequestBody.create(mediaType, jsonObject.toString());
            final Request request = new Request.Builder().url(url).header("Cookie",Cookie).post(requestBody).build();
            client.newCall(request).enqueue(callback);
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

    //get请求 不需传参 不需cookie
    public static void GetValue(String address, Callback callback) {
        OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder().url(address).build();
        client.newCall(request).enqueue(callback);
    }
}

 

转载于:https://www.cnblogs.com/Mr-Deng/p/11451896.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值