RecyclerView+MVP+OKhttp

来源:互联网 发布:数据库原理 编辑:程序博客网 时间:2024/05/22 03:37
这是一个RecyclerView的案例,用到了OKhttp和MVP,下面先看一下MainActivity
public class MainActivity extends AppCompatActivity implements Iview {    MyPresenter presenter;    private RecyclerView mRcv;    PhoneBean pbean1;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();        presenter = new MyPresenter(this, this);        presenter.Loading();//        LinearLayoutManager manager=new LinearLayoutManager(this);//        mRcv.setLayoutManager(manager);//        GridLayoutManager manager=new GridLayoutManager(this,2);//        mRcv.setLayoutManager(manager);        StaggeredGridLayoutManager manager=new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL);        mRcv.setLayoutManager(manager);    }    private void initView() {        mRcv = (RecyclerView) findViewById(R.id.rcv);    }    @Override    public void showData(PhoneBean pbean) {        pbean1=pbean;        MyRecyAdapter myRecyAdapter=new MyRecyAdapter();        mRcv.setAdapter(myRecyAdapter);    }    class MyRecyAdapter extends RecyclerView.Adapter<MyRecyAdapter.ViewHolder>{        @Override        public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {            View vi=View.inflate(MainActivity.this,R.layout.item_layout,null);            return new ViewHolder(vi);        }        @Override        public void onBindViewHolder(ViewHolder holder, int position) {            holder.tv.setText(pbean1.getData().get(position).getTitle());            Glide.with(MainActivity.this)                    .load(pbean1.getData().get(position).getImages())                    .into(holder.imv);        }        @Override        public int getItemCount() {            return pbean1.getData()==null?0:pbean1.getData().size();        }        class ViewHolder extends RecyclerView.ViewHolder{            TextView tv;            ImageView imv;            public ViewHolder(View itemView) {                super(itemView);                tv = (TextView) itemView.findViewById(R.id.tv);                imv = (ImageView) itemView.findViewById(R.id.imv);            }        }    }}//这是model包里的两个类Imodel和MyModel,MyModel实现了Imodel接口
public interface Imodel {    public void initData(Callback callback);}******************************************************************************************************
public class MyModel implements Imodel {    @Override    public void initData(Callback callback) {        OkHttpUtils.getInstance().doGet("http://120.27.23.105/product/getProducts?pscid=39&page=1",callback);    }}
//这是View包里的Iview类
public interface Iview {    public void showData(PhoneBean pbean);}
//这是Presenter包里的MyPresenter类
public class MyPresenter {    Context context;    Iview view;    MyModel model;    public MyPresenter(Context context,Iview view){            this.context=context;            this.view=view;            model=new MyModel();    }    public void Loading(){        model.initData(new OnUiCallback() {            @Override            public void onFailed(Call call, IOException e) {            }            @Override            public void onSuccess(String result) {                Gson gson=new Gson();                PhoneBean pbean=gson.fromJson(result,PhoneBean.class);                view.showData(pbean);            }        });    }}
//这是OKhttp的封装类

public class OkHttp3Utils {    private static OkHttpClient okHttpClient = null;    public OkHttp3Utils() {    }    private static OkHttpClient getOkHttpClient() {        synchronized (OkHttp3Utils.class) {            if (okHttpClient == null) {                okHttpClient = new OkHttpClient();            }        }        return okHttpClient;    }    //上传文件    public static void loadFile(String url, File file,String fileName){        OkHttpClient okHttpClient = getOkHttpClient();        //设置文件类型        RequestBody requestBody = RequestBody.create(MediaType.parse("application/octet-stream"),file);        //设置请求体        RequestBody body = new MultipartBody.Builder()                .setType(MultipartBody.FORM)                .addFormDataPart("image",fileName,requestBody)                .build();        //请求方式        Request request = new Request.Builder().url(url).post(body).build();        okHttpClient.newCall(request).enqueue(new Callback() {            @Override            public void onFailure(Call call, IOException e) {            }            @Override            public void onResponse(Call call, Response response) throws IOException {                Log.i("成功","成功");            }        });    }    /**     * 1.接口地址     * 2.接口回调     */    public static void doGet(String url,Callback callback){        OkHttpClient okHttpClient = getOkHttpClient();        Request request = new Request.Builder().url(url).build();        okHttpClient.newCall(request).enqueue(callback);    }    /**     * 1.地址     * 2.接口回调     * 3.请求体     */    public static void doPost(String url, Map<String,String> map,Callback callback){        OkHttpClient okHttpClient = getOkHttpClient();        FormBody.Builder builder = new FormBody.Builder();        //遍历map集合   设置请求体        for (String mapKey : map.keySet()){           builder.add(mapKey,map.get(mapKey));        }        //设置请求方式        Request request = new Request.Builder().url(url).post(builder.build()).build();        //执行请求方式    接口回调        okHttpClient.newCall(request).enqueue(callback);    }    /**     *1.下载地址     */    public static void doDown(String url,Callback callback){        OkHttpClient okHttpClient = getOkHttpClient();        Request build = new Request.Builder().url(url).build();        okHttpClient.newCall(build).enqueue(callback);    }}

***************************************************************************************************************

public class OkHttpUtils {    private Handler handler=new Handler();    public Handler getHandler(){        return handler;    }    //单例    private static OkHttpUtils okHttpUtils=new OkHttpUtils();    private OkHttpUtils(){};    public static OkHttpUtils getInstance(){        return okHttpUtils;    }    private OkHttpClient client;    private void initOkHttpClient(){        if (client==null){            client=new OkHttpClient.Builder().build();        }    }      //公用的get请求方法  完成的功能不确定    public void doGet(String url, Callback callback){        initOkHttpClient();        Request request=new Request.Builder().url(url).build();        client.newCall(request).enqueue(callback);    }}

*******************************************************************************************************

public abstract class OnUiCallback implements Callback {
    private Handler handler=OkHttpUtils.getInstance().getHandler();
    public abstract void onFailed(Call call,IOException e);
    public abstract void onSuccess(String result);


    @Override
    public void onFailure(final Call call, final IOException e) {
        //该方法就是把  线程post到handler所在的线程
        handler.post(new Runnable() {
            @Override
            public void run() {
//                e.getMessage()
                onFailed(call,e);
            }
        });
    }

    @Override
    public void onResponse(Call call, Response response) throws IOException {
        final String result=response.body().string();
        handler.post(new Runnable() {
            @Override
            public void run() {
                onSuccess(result);
            }
        });
    }
}





 
 
原创粉丝点击