Android_OkHttp封装
来源:互联网 发布:海量数据库解决方案 编辑:程序博客网 时间:2024/06/07 03:32
一:定义一个接口里面有请求成功与失败的方法
public interface CallBack { void onSuccess(Object o); void onFailed(Exception e);}
二:工具类中
package activity.example.com.httputils;import android.os.Handler;import com.google.gson.Gson;import java.io.IOException;import java.util.Map;import okhttp3.Call;import okhttp3.Callback;import okhttp3.FormBody;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.Response;/** * Created by 壹颗大金星 on 2017/11/9. */public class HttpUtils { private static volatile HttpUtils instance; private static Handler handler = new Handler(); private HttpUtils(){ } public static HttpUtils getInstance() { if (instance == null) { synchronized (HttpUtils.class) { if (instance == null) { instance = new HttpUtils(); } } } return instance; } //get请求 public void get(String url, Map<String,String> map, final CallBack callBack, final Class c){ //对url和参数做拼接处理 StringBuffer stringBuffer = new StringBuffer(); stringBuffer.append(url); //判断是否存在? if中是存在 if(stringBuffer.indexOf("?")!=-1 ){ //判断?是否在最后一位 if中是不在最后一位 if(stringBuffer.indexOf("?")!=stringBuffer.length()-1){ stringBuffer.append("&"); } }else{ stringBuffer.append("?"); } for(Map.Entry<String,String> entry:map.entrySet()){ stringBuffer.append(entry.getKey()) .append("=") .append(entry.getValue()) .append("&"); }//判断是否存在& if中是存在if(stringBuffer.indexOf("&")!=-1){ stringBuffer.deleteCharAt(stringBuffer.lastIndexOf("&"));} //1:创建OkHttpClient对象 OkHttpClient okHttpClient = new OkHttpClient(); //2:创建Request对象 final Request request = new Request.Builder() .get() .url(stringBuffer.toString()) .build(); //3:创建Call对象 Call call = okHttpClient.newCall(request); //4:请求网络 call.enqueue(new Callback() { //请求失败 @Override public void onFailure(Call call, final IOException e) { handler.post(new Runnable() { @Override public void run() { callBack.onFailed(e); } }); } //请求成功 @Override public void onResponse(Call call, Response response) throws IOException { String result = response.body().string(); //拿到数据解析 final Object o = new Gson().fromJson(result, c); //当前是在子线程,回到主线程中 handler.post(new Runnable() { @Override public void run() { //回调 callBack.onSuccess(o); } }); } }); } //post请求 public void post(String url, Map<String,String> map, final CallBack callBack, final Class c){ //1:创建OkHttpClient对象 OkHttpClient okHttpClient = new OkHttpClient(); //2:提供post请求需要的body对象 FormBody.Builder builder = new FormBody.Builder(); for(Map.Entry<String,String> entry:map.entrySet()){ builder.add(entry.getKey(),entry.getValue()); } FormBody body = builder.build(); //3:创建Request对象 final Request request = new Request.Builder() .post(body) .url(url) .build(); //4:创建Call对象 Call call = okHttpClient.newCall(request); //5:请求网络 call.enqueue(new Callback() { //请求失败 @Override public void onFailure(Call call, final IOException e) { handler.post(new Runnable() { @Override public void run() { callBack.onFailed(e); } }); } //请求成功 @Override public void onResponse(Call call, Response response) throws IOException { String result = response.body().string(); //拿到数据解析 final Object o = new Gson().fromJson(result, c); //当前是在子线程,回到主线程中 handler.post(new Runnable() { @Override public void run() { //回调 callBack.onSuccess(o); } }); } }); }}
三:MainActivity引用
package activity.example.com.httputils;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.TextView;import java.util.HashMap;import java.util.Map;public class MainActivity extends AppCompatActivity { private Button get; private TextView text; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); get = (Button)findViewById(R.id.get); text = (TextView)findViewById(R.id.text); get.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Map<String,String> map = new HashMap<String, String>(); map.put("mobile","00000000000"); map.put("password","123456"); HttpUtils.getInstance().get("http://120.27.23.105/user/login", map, new CallBack() { @Override public void onSuccess(Object o) { //o请求回来的数据,已经解析完 final User user = (User)o; //请求出来的数据展示到textview上 text.setText(user.getMsg()); } @Override public void onFailed(Exception e) { } },User.class);//最后一个参数是解析的实体类 } }); }}
阅读全文
2 0
- Android_OkHttp封装
- Android_OkHttp封装
- Android_OkHttp简介
- Android_OkHttp源码分析
- Android_OkHttp介绍与使用
- Android_Okhttp上传与下载文件
- Android_OkHttp+Picasso+RecyclerView实现网络图片下载瀑布流
- 封装
- 封装
- 封装
- 封装
- 封装
- 封装
- 封装
- 封装
- 封装
- 封装
- 封装
- iOS React Native version>=0.45 build double conversion fail (升级到0.45需要配置的资源)
- 【Luogu1273】有线电视网(动态规划)
- maven新建ssm项目中pom.xml文件内容
- 三 Java对象和类
- 征信良好月入够高,却总是被拒,究竟是何原因?
- Android_OkHttp封装
- Webmagic-定制组件
- 浅析C#中的Attribute
- 阿里云首页逐帧动画steps
- 安卓Touch事件的分发流程
- 【JAVA-多线程】ThreadLocal 学习总结
- java生成图形验证码
- 1003. 我要通过!(20)
- Java--一些小实例