封装OkHttpUtils使用类,doGet,doPost方法
依赖
compile 'com.squareup.okhttp3:okhttp:3.9.1'
权限
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
接口OnFinishListener
public interface OnFinishListener {
void onFailed(String msg);
void onSuccess(Object obj);
}
封装的OkHttpUtils
public class OkHttpUtils {
private static Handler handler=new Handler();
//单例模式
private static OkHttpUtils OK_HTTP_UTILS=null;
/**
* 得到OkHttpUtils实例对象
*
* @return
*/
private OkHttpUtils(){}
public static OkHttpUtils getInstance(){
if(null==OK_HTTP_UTILS){
synchronized (OkHttpUtils.class){
if(null==OK_HTTP_UTILS){
OK_HTTP_UTILS=new OkHttpUtils();
}
}
}
return OK_HTTP_UTILS;
}
/**
* Get请求
* @param onFinishListener
*/
public void doGet(String path, Map<String,String> map,final OnFinishListener onFinishListener){
StringBuffer sb = new StringBuffer();
sb.append(path);
//判断path是否包含一个
if(sb.indexOf("?")!=-1){
//判断"?"是否在最后一个
if(sb.indexOf("?")!=sb.length()-1){
sb.append("&");
}
}else{
sb.append("?");
}
//遍历map集合中所有请求参数
for(Map.Entry<String, String> entry:map.entrySet()){
sb.append(entry.getKey())
.append("=")
.append(entry.getValue())
.append("&");
}
if(sb.lastIndexOf("&")!=-1){
sb.deleteCharAt(sb.length()-1);
}
OkHttpClient okHttpClient=new OkHttpClient();
//构建请求项
Request request=new Request.Builder()
.get()
.url(sb.toString())
.build();
Call call =okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, final IOException e) {
//请求失败
handler.post(new Runnable() {
@Override
public void run() {
onFinishListener.onFailed(e.getMessage());
}
});
}
@Override
public void onResponse(Call call, final Response response) throws IOException {
if(response.isSuccessful()){
//得到服务器的响应结果
final String result = response.body().string();
//请求成功
handler.post(new Runnable() {
@Override
public void run() {
//主线程当中执行
onFinishListener.onSuccess(result);
}
});
}
}
});
}
/**
* post请求
*
* @param path
* @param map
* @param onFinishListener
*/
public void doPost(String path,Map<String,String> map,final OnFinishListener onFinishListener){
OkHttpClient okHttpClient=new OkHttpClient();
//构建参数的对象
FormBody.Builder builder = new FormBody.Builder();
//遍历map集合,获取用户的key/value
for(String key:map.keySet()){
builder.add(key,map.get(key));
}
//构建请求项
Request request=new Request.Builder()
.post(builder.build())
.url(path)
.build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, final IOException e) {
handler.post(new Runnable() {
@Override
public void run() {
onFinishListener.onFailed(e.getMessage());
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if(response.isSuccessful()){
final String result = response.body().string();
handler.post(new Runnable() {
@Override
public void run() {
onFinishListener.onSuccess(result);
}
});
}
}
});
}
}
调用MainActivity
public class MainActivity extends AppCompatActivity implements OnFinishListener{
private OkHttpUtils okHttpUtils;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
okHttpUtils = OkHttpUtils.getInstance();
}
public void btnForGet(View view){
Map<String,String> params=new HashMap<>();
params.put("mobile","15011445154");
params.put("password","123456");
okHttpUtils.doGet("https://www.zhaoapi.cn/user/login",params,this);
}
public void btnForPost(View view){
Map<String,String> params=new HashMap<>();
params.put("mobile","15011445154");
params.put("password","123456");
okHttpUtils.doPost("https://www.zhaoapi.cn/user/login",params,this);
}
@Override
public void onFailed(String msg) {
System.out.println("MainActivity : "+msg+" 线程名 : "+Thread.currentThread().getName());
}
@Override
public void onSuccess(Object obj) {
System.out.println("MainActivity : "+obj.toString()+"\n 线程名 : "+Thread.currentThread().getName());
}
}
布局activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button
android:onClick="btnForGet"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="使用封装的OkHttp类进行GET请求"/>
<Button
android:onClick="btnForPost"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="使用封装的OkHttp类进行Post请求"/>
</LinearLayout>