簡單的MVP模式OkHttp網絡請求框架封裝

具體模式如圖json

準備工做網絡

抽取Base類ide

public abstract class BaseActivity extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(getLayoutId());
        initView();
        initData();
    }
    protected abstract void initData();
    protected abstract void initView();
    protected abstract int getLayoutId();

    @Override
    protected void onResume() {
        super.onResume();
        AppUtil.mBaseActivity=this;
    }
}

建立ui

public class AppUtil extends Application {
    public static BaseActivity mBaseActivity;
    @Override
    public void onCreate() {
        super.onCreate();
    }
}

首先 別忘了導入依賴this

compile 'com.squareup.okhttp3:okhttp:3.8.1'

而後:開啓碼農模式url

第一步.V層 一個類足以接口

public interface IHomeView {
    void getstringData(String data);
}

第二步.M層固定封裝模式,能夠按自身需求修改ip

1封裝一個成功方法和失敗方法的接口get

public interface NetRequestClickListener {
    void chenggong(String str);
    void error(String e);
}

2封裝OkHttp單例類string

public class OkhttpUtil {
    private static OkhttpUtil okhttpUtil;
    private OkHttpClient okHttpClient;
    private OkhttpUtil(){
        okHttpClient=new OkHttpClient.Builder().build();
    }
    public static OkhttpUtil getInstance(){
        if(okhttpUtil==null){
            synchronized (OkhttpUtil.class){
                if(okhttpUtil==null){
                    okhttpUtil=new OkhttpUtil();
                }
            }
        }
        return okhttpUtil;
    }
    public void get(String url, final NetRequestClickListener netRequestClickListener){
        Request request = new Request.Builder().url(url).build();
        okHttpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                final String s = e.toString();
                AppUtil.mBaseActivity.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        netRequestClickListener.error(s);
                    }
                });
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                final String string = response.body().string();

//                Log.e("TAG",string+"-----------" );
                AppUtil.mBaseActivity.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        netRequestClickListener.chenggong(string);
                    }
                });
            }
        });
    }
}

3M層調用接口

public interface IHomeModel {
    void requestData(String url, NetRequestClickListener netRequestClickListener);
}

4M實現類

public class HomeModel implements IHomeModel {
    @Override
    public void requestData(String url, NetRequestClickListener netRequestClickListener) {
        OkhttpUtil.getInstance().get(url,netRequestClickListener);
    }
}

第三步.P層實現類(溝通M.V)

public class HomePresenter implements NetRequestClickListener{
    IHomeModel iHomeModel;
    IHomeView iHomeView;
    public HomePresenter(IHomeView iHomeView){
        this.iHomeView=iHomeView;
        iHomeModel=new HomeModel();
    }
    public void getUrl(String url){
        iHomeModel.requestData(url,this);
    }
    @Override
    public void chenggong(String str) {
        iHomeView.getstringData(str);
    }

    @Override
    public void error(String e) {
        iHomeView.getstringData(e);
    }
}

視圖層顯示使用

public class MainActivity extends BaseActivity implements IHomeView {

    private TextView tv;
    @Override
    protected int getLayoutId() {
        return R.layout.activity_main;
    }
    @Override
    protected void initData() {
    }
    @Override
    protected void initView() {
        tv = (TextView) findViewById(R.id.tv);
        new HomePresenter(this).getUrl("http://www.ipanda.com/kehuduan/PAGE14501767715521482/index.json");
    }
    @Override
    public void getstringData(String data) {
        //具體使用網絡請求回來的數據
        Log.e("LAG", "--------------------" + data);
    }
}

不完善,等待更新

相關文章
相關標籤/搜索