OKhttp+Retrofit的封装加单例模式MVP实现

本文介绍了一个基于Retrofit与OkHttp实现的网络请求框架,该框架包括了Personlei类、Modellei类等关键组件,并展示了如何在MainActivity中进行实际调用。文章详细解释了各部分的功能及其实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//依赖

compile 'com.facebook.fresco:fresco:0.13.0'
compile 'com.youth.banner:banner:1.4.9'
compile 'com.squareup.okhttp3:okhttp:3.4.1'
compile 'com.android.support:recyclerview-v7:26.+'
compile 'com.squareup.retrofit2:retrofit:2.0.0'
compile 'com.squareup.retrofit2:converter-gson:2.0.2'


//Personlei

package com.example.gezhonglianxi;
import java.util.Map;
/**
 * author:Created by Chenxu on 2018/1/1.
 */
public class Personlei implements Person,Model.Onfinsh {
    private Myinit myinit;
    private final Modellei modellei;
    public Personlei(Myinit myinit) {
        this.myinit = myinit;
        modellei = new Modellei();
    }
    @Override
    public void canshu(String url, Map<String, String> map) {
        if(myinit==null){
            return;
        }
        modellei.canshu(url,map,this);
    }
    @Override
    public void success(AllBean allBean) {
        myinit.success(allBean);
    }
    @Override
    public void failure(String sb) {
        myinit.failure(sb);
    }
}


//Person接口

public interface Person {
    void canshu(String url, Map<String,String> map);
}


//Modellei

public class Modellei implements Model {

    @Override
    public void canshu(String url, Map<String, String> map, final Onfinsh onfinsh) {
//        RetrofitUtils instance = RetrofitUtils.getInstance(map, url);

        Log.e("chen", "canshu: 我是接受到的数据"+url+map );
        Edokthhp.getInert().doGet(map, url, new Utiulsinteface() {
            @Override
            public void chenggong(AllBean allBean) {
                onfinsh.success(allBean);
            }

            @Override
            public void shibai(String shi) {
                onfinsh.failure(shi);
            }
        });

//        RetrofitUtils.getInstance().chen(map, url, new Utiulsinteface() {
//            @Override
//            public void chenggong(AllBean allBean) {
//                onfinsh.success(allBean);
//            }
//
//            @Override
//            public void shibai(String shi) {
//                onfinsh.failure(shi);
//            }
//        });

    }
}


//Model接口

public interface Model {
    public interface Onfinsh {
        void  success(AllBean allBean);
        void failure(String sb);
    }
    void canshu(String url, Map<String,String> map,Onfinsh onfinsh);
}

//Edokthhp  这个是封装类就是类名有点别扭,复制之前的忘记改名字了

import android.os.Handler;
import java.util.Map;
import okhttp3.OkHttpClient;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
/**
 * author:Created by Chenxu on 2017/12/21.
 */
public class Edokthhp {
    private Handler handler=new Handler();
    private static Edokthhp okHttp;
    private String message;
    private String result;

    private Edokthhp(){

    }
    public static Edokthhp getInert(){
        if(null == okHttp){
            synchronized (Edokthhp.class){
                okHttp=new Edokthhp();
            }
        }
        return okHttp;
    }
    public  void doGet(Map<String,String> map, String uri, final Utiulsinteface okinteface){
        //创建OkHttp网络请求对象
        OkHttpClient build1 = new OkHttpClient.Builder()
                .build();
        //创建一个Retrofit的创建对象
        Retrofit build = new Retrofit.Builder()
                .addConverterFactory(GsonConverterFactory.create())
                //通过这个方法将Okhttp放进Retrofit中,实现结合使用
                .client(build1)
                .baseUrl(uri)
                .build();
        //APIInterface是我们自定义的接口类,用来拼接地址
        Servceinteface servceinteface = build.create(Servceinteface.class);
                Call call = servceinteface.call(map);
        call.enqueue(new Callback<AllBean>() {
            @Override
            public void onResponse(Call<AllBean> call, Response<AllBean> response) {
                AllBean body = response.body();
                okinteface.chenggong(body);
            }

            @Override
            public void onFailure(Call<AllBean> call, Throwable t) {
okinteface.shibai(t.getMessage());
            }
        });
    }
}


//Myinit

public interface Myinit {
    void  success(AllBean allBean);
    void failure(String sb);
}


//Servceinteface的接口

import java.util.Map;
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.QueryMap;

/**
 * author:Created by Chenxu on 2018/1/1.
 * http://result.eolinker.com/umIPmfS6c83237d9c70c7c9510c9b0f97171a308d13b611?uri=homepage
 */
public interface Servceinteface {
    @GET("umIPmfS6c83237d9c70c7c9510c9b0f97171a308d13b611")
    //泛型中放的是返回的Bean类,后面的参数放的是map集合,存放拼接的参数
    Call<AllBean> call(@QueryMap Map<String,String> map);
}


//Utiulsinteface
public interface Utiulsinteface {
    void chenggong(AllBean allBean);
    void  shibai(String shi);
}

//AllBean

//这个是泛型类直接用Gsonformat生成一下就OK了


//Main

public class MainActivity extends AppCompatActivity implements Myinit {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Personlei personlei = new Personlei(this);
        Map<String,String> map = new HashMap<>();
        map.put("uri","homepage");
        personlei.canshu("http://result.eolinker.com/",map);
    }

    @Override
    public void success(AllBean allBean) {
        AllBean.DataBean data = allBean.getData();
        String s = data.getAd1().get(0).getImage();
        Log.e("chen", "success: "+data.getAd1().get(0).getTitle()+allBean.getMsg() );
    }

    @Override
    public void failure(String sb) {
        Log.e("chen", "failure: "+sb );
    }
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值