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);
}
});
}
}
阅读全文
0 0
- mvp+Recyclerview+okhttp+Springview
- mvp+okhttp+recyclerview
- mvp,okhttp,recyclerview
- okhttp+MVP+RecyclerView
- RecyclerView+MVP+OKhttp
- okHttp+Mvp+RecyclerView
- Mvp+RecyclerView+Okhttp
- OkHttp,MVP,RecyclerView瀑布流
- Mvp框架+okhttp请求+recyclerview
- MVP简单实现OKHttp+recyclerview+springview
- MVP泛型+RecyclerView+Retrofit+OkHttp+RxJava
- MVP模式OKhttp请求RecyclerView展示数据
- MVP操作RecyclerView多条目SpringView,OKHttp封装请求网络
- MVP+OKHttp+Recyclerview+Springview下拉刷新上拉加载
- MVP架构分包+OkHttp网络请求+RecyclerView展示数据
- Retrofit2 + RxJava + Okhttp + RecyclerView用MVP架构展示数据
- MVP+OKHTTP+Fresco+RecyclerView+EventBus实现点击传值
- OKhttp,MVP,RecyclerView,联合使用,点击条目进入详情页
- 树莓派Raspbian安装mysql
- .NET问题
- 【Spring实战】Spring容器初始化完成后执行初始化数据方法
- 习题5.8
- re.match匹配多行数据失败
- RecyclerView+MVP+OKhttp
- 正则化问题
- Git回滚到历史节点(SourceTree篇)
- 2017.11.9机房小测-Exgcd+特判/树形DP/模拟
- JAVA | 2
- windows安装mysql5.7
- 十八街区
- C# 解析JSON字符串
- UVa 201 (implement)