IContact

package com.example.three_week_demo;import java.util.Map;/*** 契约类*/
public interface IContact {interface IView{void onSuccess(String json);void onError(String error);}interface IModel{void getData(String url, Map<String,Object> map, Callback callback);}interface IPresenter{void startRequest(String url,Map<String,Object> map);void onDetach();}interface Callback{void onSuccess(String json);void onError(String error);}
}

ModelImpl

package com.example.three_week_demo.model;import com.example.three_week_demo.IContact;
import com.example.three_week_demo.utils.MyNetUtils;import java.util.Map;public class ModelImpl implements IContact.IModel {@Overridepublic void getData(String url, Map<String, Object> map, final IContact.Callback callback) {MyNetUtils.getInstance().getInfo(url, map, new MyNetUtils.MyCallBack() {@Overridepublic void success(String jsonStr) {callback.onSuccess(jsonStr);}@Overridepublic void error(String error) {callback.onError(error);}});}public void getDeleteData(String url, Map<String, Object> map, final IContact.Callback callback) {MyNetUtils.getInstance().deleteInfo(url, map, new MyNetUtils.MyCallBack() {@Overridepublic void success(String jsonStr) {callback.onSuccess(jsonStr);}@Overridepublic void error(String error) {callback.onError(error);}});}
}

PresenterImpl

package com.example.three_week_demo.presenter;import com.example.three_week_demo.IContact;
import com.example.three_week_demo.model.ModelImpl;import java.lang.ref.SoftReference;
import java.util.Map;public class PresenterImpl implements IContact.IPresenter {private ModelImpl mModel;private IContact.IView mIView;private SoftReference<IContact.IView> mSoft;public PresenterImpl(IContact.IView iView) {mModel = new ModelImpl();this.mIView = iView;mSoft = new SoftReference<>(mIView);}@Overridepublic void startRequest(String url, Map<String, Object> map) {mModel.getData(url, map, new IContact.Callback() {@Overridepublic void onSuccess(String json) {mIView.onSuccess(json);}@Overridepublic void onError(String error) {mIView.onError(error);}});}public void startDeleteRequest(String url, Map<String, Object> map) {mModel.getDeleteData(url, map, new IContact.Callback() {@Overridepublic void onSuccess(String json) {mIView.onSuccess(json);}@Overridepublic void onError(String error) {mIView.onError(error);}});}@Overridepublic void onDetach() {if (mSoft != null) {mSoft.clear();}if (mModel != null) {mModel = null;}}
}

MyNetUtils

package com.example.three_week_demo.utils;import com.example.three_week_demo.MyBaseUrl;
import com.example.three_week_demo.MyRxApi;import java.io.IOException;
import java.util.Map;
import java.util.concurrent.TimeUnit;import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.ResponseBody;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
import rx.Observer;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;/*** 最终版网络工具类*/
public class MyNetUtils {private MyRxApi myRxApi;private MyNetUtils() {HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);OkHttpClient okHttpClient = new OkHttpClient.Builder().connectTimeout(10, TimeUnit.SECONDS).readTimeout(10, TimeUnit.SECONDS).addInterceptor(loggingInterceptor).addInterceptor(new Interceptor() {@Overridepublic Response intercept(Chain chain) throws IOException {//                        SharedPreferences lvxx = MyApplication.mContext.getSharedPreferences("lvxx", Context.MODE_PRIVATE);
//                        String userId = lvxx.getString("userId", null);
//                        String sessionId= lvxx.getString("sessionId",null);
//                        if (TextUtils.isEmpty(userId)||TextUtils.isEmpty(sessionId)){
//                            return chain.proceed(chain.request());
//                        }else {Request build = chain.request().newBuilder().addHeader("userId", "220").addHeader("sessionId", "1561098754274220").build();return chain.proceed(build);
//                        }}}).build();Retrofit retrofit = new Retrofit.Builder().baseUrl(MyBaseUrl.BASE_URL).addCallAdapterFactory(RxJavaCallAdapterFactory.create()).addConverterFactory(GsonConverterFactory.create()).client(okHttpClient).build();myRxApi = retrofit.create(MyRxApi.class);}private static class NetHolder {private static final MyNetUtils netutils = new MyNetUtils();}public static MyNetUtils getInstance() {return NetHolder.netutils;}//get请求方式public void getInfo(String url, Map<String, Object> map, final MyCallBack myCallBack) {myRxApi.getInfo(url, map).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer<ResponseBody>() {@Overridepublic void onCompleted() {}@Overridepublic void onError(Throwable e) {myCallBack.error(e.getMessage());}@Overridepublic void onNext(ResponseBody responseBody) {try {myCallBack.success(responseBody.string());} catch (IOException e) {e.printStackTrace();}}});}//post请求方式public void postInfo(String url, Map<String, Object> map, final MyCallBack myCallBack) {myRxApi.postInfo(url, map).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer<ResponseBody>() {@Overridepublic void onCompleted() {}@Overridepublic void onError(Throwable e) {myCallBack.error(e.getMessage());}@Overridepublic void onNext(ResponseBody responseBody) {try {myCallBack.success(responseBody.string());} catch (IOException e) {e.printStackTrace();}}});}//PUT请求方式public void putInfo(String url, Map<String, Object> map, final MyCallBack myCallBack) {myRxApi.putInfo(url, map).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer<ResponseBody>() {@Overridepublic void onCompleted() {}@Overridepublic void onError(Throwable e) {myCallBack.error(e.getMessage());}@Overridepublic void onNext(ResponseBody responseBody) {try {myCallBack.success(responseBody.string());} catch (IOException e) {e.printStackTrace();}}});}//delete请求方式public void deleteInfo(String url, Map<String, Object> map, final MyCallBack myCallBack) {myRxApi.deleteInfo(url, map).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer<ResponseBody>() {@Overridepublic void onCompleted() {}@Overridepublic void onError(Throwable e) {myCallBack.error(e.getMessage());}@Overridepublic void onNext(ResponseBody responseBody) {try {myCallBack.success(responseBody.string());} catch (IOException e) {e.printStackTrace();}}});}public interface MyCallBack {void success(String jsonStr);void error(String error);}
}

MyApplication

package com.example.three_week_demo;import android.app.Application;
import android.database.sqlite.SQLiteDatabase;import com.example.three_week_demo.dao.DaoMaster;
import com.example.three_week_demo.dao.DaoSession;/*** 用来做初始化到*/
public class MyApplication extends Application {private static DaoSession daoSession;@Overridepublic void onCreate() {super.onCreate();initGreenDao();}private void initGreenDao() {//1:通过DaoMaster.DevOpenHelper 来创建数据库DaoMaster.DevOpenHelper daoMaster = new DaoMaster.DevOpenHelper(this, "lvxx.db");//得到原生数据库SQLiteDatabase writableDatabase = daoMaster.getWritableDatabase();//通过DaoMaster对这个SQLiteDatabase进行二次包装DaoMaster daoMaster1 = new DaoMaster(writableDatabase);//返回Session对象daoSession = daoMaster1.newSession();}public static DaoSession getDaoSession() {return daoSession;}
}

MyBaseUrl

package com.example.three_week_demo;public class MyBaseUrl {public static final String BASE_URL = "http://172.17.8.100/small/";//登录的接口public static final String LOGIN_URL = "user/v1/login";//修改密码的接口public static final String UPDATEPASS_URL = "user/verify/v1/modifyUserPwd";//我的订单的接口public static final String ORDER_URL = "order/verify/v1/findShoppingCart";//圈子列表public static final String CIRCLE_URL = "circle/v1/findCircleList";//删除圈子吗public static final String DELETE_URL = "circle/verify/v1/deleteCircle";
}

MyRxApi

package com.example.three_week_demo;import java.util.Map;import okhttp3.ResponseBody;
import retrofit2.http.DELETE;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.PUT;
import retrofit2.http.QueryMap;
import retrofit2.http.Url;
import rx.Observable;public interface MyRxApi {@GETObservable<ResponseBody> getInfo(@Url String url, @QueryMap Map<String, Object> map);@POSTObservable<ResponseBody> postInfo(@Url String url, @QueryMap Map<String, Object> map);@PUTObservable<ResponseBody> putInfo(@Url String url, @QueryMap Map<String, Object> map);@DELETEObservable<ResponseBody> deleteInfo(@Url String url, @QueryMap Map<String, Object> map);}

MainActivity

package com.example.three_week_demo;import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.GridLayoutManager;
import android.util.Log;
import android.widget.Toast;import com.example.three_week_demo.adapter.MyAdapter;
import com.example.three_week_demo.bean.MyCicleBean;
import com.example.three_week_demo.bean.MyDelete;
import com.example.three_week_demo.bean.ResultBean;
import com.example.three_week_demo.dao.ResultBeanDao;
import com.example.three_week_demo.presenter.PresenterImpl;
import com.google.gson.Gson;
import com.jcodecraeer.xrecyclerview.XRecyclerView;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class MainActivity extends AppCompatActivity implements IContact.IView {private XRecyclerView mXRecy;private List<ResultBean> mList = new ArrayList<>();private MyAdapter mAdapter;private PresenterImpl mPresenter;private int page = 1;private int count = 10;private Map<String, Object> map;private ResultBeanDao mDao;private boolean mBoo = true;private int mDataIndex = 0;private int mPositon;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();mDao = MyApplication.getDaoSession().getResultBeanDao();mPresenter = new PresenterImpl(this);if (getDaoData()) {mList.addAll(getTwentyRec(mDataIndex));mAdapter.notifyDataSetChanged();Log.e("缓存的数量", getTwentyRec(mDataIndex).size() + "");Log.e("缓存的数量---", mDao.loadAll().size() + "");} else {loadData(page);}mXRecy.setLoadingListener(new XRecyclerView.LoadingListener() {@Overridepublic void onRefresh() {mList.clear();mDataIndex = 0;if (getTwentyRec(mDataIndex).size() > 0) {new Handler().postDelayed(new Runnable() {@Overridepublic void run() {mList.addAll(getTwentyRec(mDataIndex));mAdapter.notifyDataSetChanged();mXRecy.refreshComplete();}}, 1000);} else {page = 1;loadData(page);}}@Overridepublic void onLoadMore() {page++;mDataIndex++;if (getTwentyRec(mDataIndex).size() > 0) {new Handler().postDelayed(new Runnable() {@Overridepublic void run() {mList.addAll(getTwentyRec(mDataIndex));mAdapter.notifyDataSetChanged();mXRecy.loadMoreComplete();}}, 2000);} else {loadData(page);}}});mAdapter.setItemClick(new MyAdapter.ItemClick() {@Overridepublic void setItemClick(int position) {mPositon = position;mBoo = false;ResultBean bean = mList.get(position);if (getDaoData()) {ResultBean load = mDao.load(bean.getMId());if (load != null) {mDao.delete(load);Toast.makeText(MainActivity.this, "删除数据库成功", Toast.LENGTH_SHORT).show();mList.remove(mPositon);mAdapter.notifyDataSetChanged();}} else {Map<String, Object> map = new HashMap<>();map.put("circleId", bean.getCommodityId());mPresenter.startDeleteRequest(MyBaseUrl.DELETE_URL, map);}}});}private void loadData(int pageIndex) {mBoo = true;map = new HashMap<>();map.put("page", pageIndex);map.put("count", count);mPresenter.startRequest(MyBaseUrl.CIRCLE_URL, map);}private void initView() {mXRecy = findViewById(R.id.XRecy_View);//设置上下拉可以刷新mXRecy.setLoadingMoreEnabled(true);mXRecy.setPullRefreshEnabled(true);mXRecy.setLayoutManager(new GridLayoutManager(this, 2));mAdapter = new MyAdapter(mList, this);mXRecy.setAdapter(mAdapter);}@Overridepublic void onSuccess(String json) {if (mBoo) {Gson gson = new Gson();MyCicleBean myCicleBean = gson.fromJson(json, MyCicleBean.class);mList.addAll(myCicleBean.getResult());mAdapter.notifyDataSetChanged();mXRecy.refreshComplete();mXRecy.loadMoreComplete();if (getDaoData()) {for (int i = 0; i < myCicleBean.getResult().size(); i++) {ResultBean resultBean = myCicleBean.getResult().get(i);if (mDao.loadAll().get(i).getCommodityId() != resultBean.getCommodityId()) {mDao.insert(resultBean);Log.e("===", "===");}}} else {for (int i = 0; i < myCicleBean.getResult().size(); i++) {ResultBean resultBean = myCicleBean.getResult().get(i);mDao.insert(resultBean);Log.e("---", i + "");}}} else {Gson gson = new Gson();MyDelete delete = gson.fromJson(json, MyDelete.class);if (delete.getStatus().equals("0000")) {Toast.makeText(this, "删除成功", Toast.LENGTH_SHORT).show();mList.remove(mPositon);mAdapter.notifyDataSetChanged();} else {Toast.makeText(this, "删除失败", Toast.LENGTH_SHORT).show();}}}@Overridepublic void onError(String error) {Toast.makeText(this, error, Toast.LENGTH_SHORT).show();}@Overrideprotected void onDestroy() {super.onDestroy();if (mPresenter != null) {mPresenter.onDetach();}}//判断数据库是否为空 true不为空private boolean getDaoData() {boolean boo = false;if (mDao.loadAll() != null && mDao.loadAll().size() > 0) {boo = true;}return boo;}//页数public List<ResultBean> getTwentyRec(int offset) {List<ResultBean> listMsg = mDao.queryBuilder().offset(offset * 10).limit(10).list();return listMsg;}}

MyAdapter

package com.example.three_week_demo.adapter;import android.content.Context;
import android.support.annotation.NonNull;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;import com.bumptech.glide.Glide;
import com.example.three_week_demo.R;
import com.example.three_week_demo.bean.ResultBean;
import com.jcodecraeer.xrecyclerview.XRecyclerView;import java.util.List;public class MyAdapter extends XRecyclerView.Adapter<MyAdapter.Holder> {private List<ResultBean> datas;private Context mContext;public MyAdapter(List<ResultBean> datas, Context context) {this.mContext = context;this.datas = datas;}@NonNull@Overridepublic Holder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {View view = View.inflate(viewGroup.getContext(), R.layout.xrecy_item, null);Holder holder = new Holder(view);return holder;}@Overridepublic void onBindViewHolder(@NonNull Holder holder, final int i) {ResultBean resultBean = datas.get(i);holder.mName.setText(resultBean.getNickName() + "");String image = resultBean.getImage();String[] split = image.split(",");if (split != null && split.length > 0) {Glide.with(mContext).load(split[0]).into(holder.mImage);}holder.itemView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (itemClick!=null){itemClick.setItemClick(i);}}});
//}@Overridepublic int getItemCount() {return datas.size();}public class Holder extends XRecyclerView.ViewHolder {private TextView mName;private ImageView mImage;public Holder(@NonNull View itemView) {super(itemView);mName = itemView.findViewById(R.id.Xrecy_Name);mImage = itemView.findViewById(R.id.recy_Image);}}public interface ItemClick{void setItemClick(int position);}private ItemClick itemClick;public void setItemClick(ItemClick itemClick) {this.itemClick = itemClick;}
}

delete请求数据详解相关推荐

  1. 转: Springboot — 用更优雅的方式发HTTP请求(RestTemplate详解)

    转自: Springboot - 用更优雅的方式发HTTP请求(RestTemplate详解) - Java知音号 - 博客园RestTemplate是Spring提供的用于访问Rest服务的客户端, ...

  2. python爬取app中的音频_Python爬取喜马拉雅音频数据详解

    码农公社  210.net.cn  210是何含义?10月24日是程序员节,1024 =210.210既 210 之意. Python爬取喜马拉雅音频数据详解 一.项目目标 爬取喜马拉雅音频数据 受害 ...

  3. 浏览器对象存储数据详解

    浏览器对象存储数据详解 前言 随着需求的发展,浏览器的功能正变的越来越强大,在本地存储数据可以极大的方便人们进行各种操作,如localStroage/sessionStroage等,下面我就记录在项目 ...

  4. SL651-2014 《水文监测数据通信规约》 中心站查询遥测站实时数据详解

     SL651-2014 <水文监测数据通信规约> 中心站查询遥测站实时数据详解 全国水文标准化技术委员会水文仪器分技术委员会为适应我国水文仪器标准化工作的迅速发展,对用来监测河流.水库等水 ...

  5. java ajax同步请求,成都汇智动力-java ajax实现异步同步请求全面详解

    原标题:成都汇智动力-java ajax实现异步同步请求全面详解 对象 var request=new () //兼容IE5 IE6 if (window.) {// code for IE7+, F ...

  6. python爬取喜马拉雅_Python爬虫实战案例之爬取喜马拉雅音频数据详解

    这篇文章我们来讲一下在网站建设中,Python爬虫实战案例之爬取喜马拉雅音频数据详解.本文对大家进行网站开发设计工作或者学习都有一定帮助,下面让我们进入正文. 前言 喜马拉雅是专业的音频分享平台,汇集 ...

  7. dicom多帧转换_Python解析多帧dicom数据详解

    概述 pydicom是一个常用python DICOM parser.但是,没有提供解析多帧图的示例.本文结合相关函数和DICOM知识做一个简单说明. DICOM多帧数据存储 DICOM标准中关于多帧 ...

  8. android ble蓝牙接收不到数据_Android蓝牙4.0 Ble读写数据详解 -2

    Android蓝牙4.0 Ble读写数据详解 -2 上一篇说了如何扫描与链接蓝牙 这篇文章讲讲与蓝牙的数据传输,与一些踩到的坑. 先介绍一款调试工具,专门调试Ble蓝牙的app.名字叫:nRF-Con ...

  9. InheritableThreadLocal类原理简介使用 父子线程传递数据详解 多线程中篇(十八)...

    上一篇文章中对ThreadLocal进行了详尽的介绍,另外还有一个类: InheritableThreadLocal 他是ThreadLocal的子类,那么这个类又有什么作用呢? 测试代码 publi ...

最新文章

  1. 用TableView写带特效的cell
  2. input内的字体颜色_嘉兴市硅胶喷涂颜色油订制
  3. FIREDAC连接SQLITE乱码的解决
  4. Atom飞行手册翻译: 4.3 作用域设置、作用域和作用域描述符
  5. ARM 架构演进对未来计算意味着什么?
  6. Spring Boot 推荐的基础 POM 文件
  7. EnterpriseDb公司的Postgres Enterprise Manager 安装图解
  8. 【C++leetcode】寻找给定字符串的最大回文子串
  9. ajax 详解(GET,POST方式传输以其封装)
  10. uni-app 中通过 async + await + Promise 实现 request 请求同步化
  11. MySQL(6)-----数据类型
  12. 3D resnet根据UCF101数据集制作自己的数据集实现动作识别
  13. 基本分段存储管理方式
  14. 直击2018互联网大裁员:繁花落地,一地鸡毛
  15. Nginx ACCESS日志过滤CSS JS 图片等静态文件——筑梦之路
  16. Python+Appium自动化测试-通过坐标定位元素
  17. oracle 安装截图,ORACLE WIN7安装过程截图
  18. 新入职了一个卷王,天天加班到凌晨,各种技术张口就来,太让人崩溃......
  19. 7-文件IO-阻塞与非阻塞IO
  20. 【SecureCRT】SecureCRT 绝佳配色方案, 保护你的眼睛

热门文章

  1. “RSoft光电器件设计仿真技术与应用”专题培训通知
  2. 丈量你的代码,从cloc开始
  3. Postman中文版安装
  4. STM32 RS485传输ADC值代码
  5. X线DR医学图像 --- DR医用滤线栅及摩尔纹详解 (一) 滤线栅的原理
  6. 中南大学计算机工程制图考试题库,中南大学-工程制图试题及答案和习题集答案 cad...
  7. 家里安装了新的宽带,大部分电视和电影不能观看需要再次购买VIP,你怎么看
  8. Origin绘图模板与使用2022
  9. 使用selenium解决滑块验证的问题
  10. win10输入法没有选字框