##RetrofitUtil
public class RetrofitUtil {
private static RetrofitUtil instance;
private final Retrofit retrofit;
private RetrofitUtil() {
HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();
httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.addInterceptor(httpLoggingInterceptor)
.build();
//gson解析器创建
retrofit = new Retrofit.Builder()
.baseUrl(Api.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())//gson解析器创建
.client(okHttpClient)
.build();
}
public UserApiService setRetrofit(){
return retrofit.create(UserApiService.class);
}
public static RetrofitUtil getInstance(){
if (instance==null){
synchronized (RetrofitUtil.class){
instance = new RetrofitUtil();
}
}
return instance;
}
##ListModel列表model
public class ListModel implements Contract.IModel {
@Override
public void getList(final HashMap<String, String> map, final RequestCallback requestCallback) {
UserApiService userApiService = RetrofitUtil.getInstance().setRetrofit();
Call<ListBean> list2 = userApiService.Get(Api.LIST_URL, map);
list2.enqueue(new Callback<ListBean>() {
@Override
public void onResponse(Call<ListBean> call, Response<ListBean> response) {
ListBean body = response.body();
requestCallback.Successreq(body);
}
@Override
public void onFailure(Call<ListBean> call, Throwable t) {
requestCallback.Failreq("请求失败");
}
});
}
@Override
public void getXq(HashMap<String, String> map, final RequestCallback requestCallback) {
UserApiService userApiService = RetrofitUtil.getInstance().setRetrofit();
Call<XqBean> get = userApiService.Get1(Api.XQ_URL, map);
get.enqueue(new Callback<XqBean>() {
@Override
public void onResponse(Call<XqBean> call, Response<XqBean> response) {
XqBean body = response.body();
requestCallback.Successxq(body);
}
@Override
public void onFailure(Call<XqBean> call, Throwable t) {
requestCallback.Failxq("详情请求失败");
}
});
}
}
##ListPersenter
public class ListPersenter extends IPersenter {
private ListModel listModel;
private Contract.IView iView;
public ListPersenter( Contract.IView iView) {
this.listModel = new ListModel();
this.iView = iView;
}
@Override
public void getList(HashMap<String, String> map) {
if (listModel!=null){
listModel.getList(map, new RequestCallback() {
@Override
public void Failreq(String msg) {
if (iView!=null){
iView.Fail(msg);
}
}
@Override
public void Successreq(ListBean listBean) {
if (iView!=null){
iView.Success(listBean.result);
}
}
@Override
public void Failxq(String msg) {
}
@Override
public void Successxq(XqBean xqBean) {
}
});
}
}
@Override
public void getXq(HashMap<String, String> map) {
if (listModel!=null){
listModel.getXq(map, new RequestCallback() {
@Override
public void Failreq(String msg) {
}
@Override
public void Successreq(ListBean listBean) {
}
@Override
public void Failxq(String msg) {
if (iView!=null){
iView.FailXq(msg);
}
}
@Override
public void Successxq(XqBean xqBean) {
if (iView!=null){
iView.SuccessXq(xqBean.result);
}
}
});
}
}
}
##view
public class MainActivity extends AppCompatActivity implements Contract.IView {
@BindView(R.id.xrc)
XRecyclerView xrc;
private ListPersenter listPersenter;
private int page=1;
private GreenDao greenDao;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EventBus.getDefault().register(this);
ButterKnife.bind(this);
listPersenter = new ListPersenter(this);
HashMap<String, String> map = new HashMap<>();
map.put("labelId","1002");
map.put("page",page+"");
map.put("count","5");
listPersenter.getList(map);
greenDao = new GreenDao(this);
}
@Subscribe()
public void receive(String s){
Toast.makeText(this,s,Toast.LENGTH_SHORT).show();
Intent intent = new Intent(MainActivity.this,XqActivity.class);
intent.putExtra("s",s);
startActivity(intent);
}
@Override
public void Success(List<ListBean.ResultBean> list) {
if (list!=null&&list.size()>0){
ArrayList<GreenDaoBean> list1 = new ArrayList<>();
for (ListBean.ResultBean resultBean : list) {
GreenDaoBean greenDaoBean = new GreenDaoBean();
greenDaoBean.commodityId=resultBean.commodityId;
greenDaoBean.commodityName=resultBean.commodityName;
greenDaoBean.masterPic=resultBean.masterPic;
greenDaoBean.price=resultBean.price;
greenDaoBean.saleNum=resultBean.saleNum;
list1.add(greenDaoBean);
}
greenDao.add(list1);
Toast.makeText(MainActivity.this,"list请求成功",Toast.LENGTH_SHORT).show();
xrc.setLayoutManager(new GridLayoutManager(this,2));
ListAdapter listAdapter = new ListAdapter(this, list);
xrc.setAdapter(listAdapter);
}
}
@Override
public void Fail(String msg) {
Toast.makeText(MainActivity.this,"list请求失败",Toast.LENGTH_SHORT).show();
}
@Override
public void SuccessXq(XqBean.ResultBean xqBean) {
}
@Override
public void FailXq(String msg) {
}
}
##adapter
public class ListAdapter extends XRecyclerView.Adapter<ListAdapter.ViewHolder> {
private Context context;
private List<ListBean.ResultBean> list;
public ListAdapter(Context context, List<ListBean.ResultBean> list) {
this.context = context;
this.list = list;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View inflate = LayoutInflater.from(context).inflate(R.layout.list_layout, viewGroup, false);
ViewHolder viewHolder = new ViewHolder(inflate);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
final ListBean.ResultBean resultBean = list.get(i);
viewHolder.name.setText(resultBean.commodityName);
viewHolder.price.setText(resultBean.price);
viewHolder.fresro.setImageURI(resultBean.masterPic);
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
EventBus.getDefault().post(resultBean.commodityId);
}
});
}
@Override
public int getItemCount() {
return list==null?0:list.size();
}
class ViewHolder extends RecyclerView.ViewHolder{
SimpleDraweeView fresro;
TextView name,price;
public ViewHolder(@NonNull View itemView) {
super(itemView);
fresro = itemView.findViewById(R.id.fresro);
name = itemView.findViewById(R.id.name);
price = itemView.findViewById(R.id.price);
}
}
}
##contract
public interface Contract {
public abstract class IPersenter{
public abstract void getList(HashMap<String,String> map);
public abstract void getXq(HashMap<String,String> map);
}
interface IModel{
void getList(HashMap<String,String> map, RequestCallback requestCallback);
void getXq(HashMap<String,String> map, RequestCallback requestCallback);
}
interface IView{
void Success(List<ListBean.ResultBean> list);
void Fail(String msg);
void SuccessXq(XqBean.ResultBean xqBean);
void FailXq(String msg);
}
}
##UserApiService
public interface UserApiService {
@POST
@FormUrlEncoded
Call<ListBean> Post(@Url String url, @FieldMap HashMap<String,String> map);
@GET
Call<ListBean> Get(@Url String url, @QueryMap HashMap<String,String> map);
@GET
Call<XqBean> Get1(@Url String url, @QueryMap HashMap<String,String> map);
@PUT
@Headers({"Content-Type: application/json","Accept: application/json"})
Call<ListBean> updateNickname(@Header("userId") String id, @Header("sessionId") String sid, @Field("nickName") String name);
@GET
Call<ListBean> getData(@Url String url, @Path("user") String user);
}
##greendaoutil
public class GreenDaoUtil {
public DaoSession initGreenDao(Context context){
DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(context, "greendao.db");
SQLiteDatabase db = devOpenHelper.getWritableDatabase();
DaoMaster daoMaster = new DaoMaster(db);
DaoSession daoSession = daoMaster.newSession();
return daoSession;
}
}
##app
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
//设置磁盘缓存
DiskCacheConfig builder = DiskCacheConfig.newBuilder(this)
.setBaseDirectoryName("images")
.setBaseDirectoryPath(Environment.getExternalStorageDirectory())
.build();
//设置磁盘缓存的配置,生成配置文件
ImagePipelineConfig config = ImagePipelineConfig.newBuilder(this)
.setMainDiskCacheConfig(builder)
.build();
Fresco.initialize(this,config);
}
##SqliteHelp
public class SqliteHelp extends SQLiteOpenHelper {
public SqliteHelp( Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
##GreenDao方法
public class GreenDao {
private Context context;
private final GreenDaoUtil greenDaoUtil;
public GreenDao(Context context) {
this.context = context;
greenDaoUtil = new GreenDaoUtil();
}
public void add(List<GreenDaoBean> list){
DaoSession daoSession = greenDaoUtil.initGreenDao(context);
for (GreenDaoBean greenDaoBean : list) {
daoSession.insertOrReplace(greenDaoBean);
// daoSession.insertOrReplace(greenDaoBean);
}
}
}
##xq页面
public class XqActivity extends AppCompatActivity implements Contract.IView {
private XBanner xbanner;
private TextView name,price;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_xq);
initView();
ListPersenter listPersenter = new ListPersenter(this);
Intent intent = getIntent();
String s = intent.getStringExtra("s");
HashMap<String, String> map = new HashMap<>();
map.put("commodityId",s);
listPersenter.getXq(map);
}
private void initView() {
xbanner = findViewById(R.id.xbanner);
name = findViewById(R.id.name);
price = findViewById(R.id.price);
}
@Override
public void Success(List<ListBean.ResultBean> list) {
}
@Override
public void Fail(String msg) {
}
@Override
public void SuccessXq(XqBean.ResultBean xqBean) {
String[] split = xqBean.picture.split("\\,");
final List<String> list = new ArrayList<>();
for (int i=0;i<split.length;i++){
list.add(split[split.length-i-1]);
}
xbanner.setData(list,null);
xbanner.loadImage(new XBanner.XBannerAdapter() {
@Override
public void loadBanner(XBanner banner, Object model, View view, int position) {
Glide.with(XqActivity.this).load(list.get(position)).into((ImageView) view);
}
});
name.setText(xqBean.categoryName);
price.setText(xqBean.price+"");
}
@Override
public void FailXq(String msg) {
Toast.makeText(XqActivity.this,"详情失败",Toast.LENGTH_SHORT).show();
}
}