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); } }