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