mvp

该博客主要展示了MVP架构的代码实现,包含model层、presenter层和view层的接口及实现类,还涉及OkHttp的使用,用于网络请求。此外,给出了适配器和MainActivity的代码,整体围绕Android开发中的MVP架构和网络请求展开。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//model层

package com.bawie.zhoukaomoni.mvp.model;

/**

  • @Author:asus

  • @E-mail: 945574298@163.com

  • @Date:2019/3/16 14:20

  • @Description:描述信息
    */
    public interface IModel {
    void getModel(ModelCallBack modelCallBack);
    interface ModelCallBack{
    void onSuccess(Object data);
    void onFail(Exception e);

    }
    }

//model实现类‘’

package com.bawie.zhoukaomoni.mvp.model;

import com.bawie.zhoukaomoni.bean.ShopBean;
import com.bawie.zhoukaomoni.http.OkHttp;

/**

  • @Author:asus

  • @E-mail: 945574298@163.com

  • @Date:2019/3/16 14:24

  • @Description:描述信息
    */
    public class IModelImpl implements IModel {
    String Base_url=“http://172.17.8.100/small/commodity/v1/commodityList”;
    @Override
    public void getModel(final ModelCallBack modelCallBack) {
    OkHttp.getInstance().doGet(Base_url, ShopBean.class, new OkHttp.NetCallBack() {
    @Override
    public void LoadSuccess(Object obj) {
    modelCallBack.onSuccess(obj);

         }
    
         @Override
         public void LoadFail() {
    
         }
     });
    

    }
    }

//presenter

package com.bawie.zhoukaomoni.mvp.presenter;

import com.bawie.zhoukaomoni.mvp.view.Iview;

/**

  • @Author:asus
  • @E-mail: 945574298@163.com
  • @Date:2019/3/16 14:22
  • @Description:描述信息
    */
    public interface Ipresenter {
    void getPreData();
    void attchView(Iview iview);
    void Detchview(Iview iview);
    }

//presenter实现类

package com.bawie.zhoukaomoni.mvp.presenter;

import com.bawie.zhoukaomoni.MainActivity;
import com.bawie.zhoukaomoni.mvp.model.IModel;
import com.bawie.zhoukaomoni.mvp.model.IModelImpl;
import com.bawie.zhoukaomoni.mvp.view.Iview;

import java.lang.ref.SoftReference;

/**

  • @Author:asus

  • @E-mail: 945574298@163.com

  • @Date:2019/3/16 14:29

  • @Description:描述信息
    */
    public class IpresenterImpl implements Ipresenter {

    private IModelImpl iModel;
    MainActivity mainActivity;
    private SoftReference iModelSoftReference;

    @Override
    public void getPreData() {
    iModel.getModel(new IModel.ModelCallBack() {
    @Override
    public void onSuccess(Object data) {
    mainActivity.getView(data);
    }

    @Override
    public void onFail(Exception e) {
    
    }
    

    });
    }

    @Override
    public void attchView(Iview iview) {
    this.mainActivity= (MainActivity) iview;
    iModel = new IModelImpl();
    iModelSoftReference = new SoftReference(iModel);

    }

    @Override
    public void Detchview(Iview iview) {
    iview = null;
    }
    }

//view层

package com.bawie.zhoukaomoni.mvp.view;

/**

  • @Author:asus
  • @E-mail: 945574298@163.com
  • @Date:2019/3/16 14:23
  • @Description:描述信息
    */
    public interface Iview {
    void getView(Object data);
    }

//okhttp

package com.bawie.zhoukaomoni.http;

/**

  • @Author:asus
  • @E-mail: 945574298@163.com
  • @Date:2019/3/16 14:13
  • @Description:描述信息
    */

import android.os.Environment;
import android.os.Handler;
import android.util.Log;

import com.google.gson.Gson;

import java.io.File;
import java.io.IOException;
import java.util.concurrent.TimeUnit;

import okhttp3.Cache;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class OkHttp {

private OkHttpClient client;
private static volatile OkHttp instance;
private Handler handler = new Handler();

//创建拦截器
private Interceptor getAppInterceptor() {
    Interceptor interceptor = new Interceptor() {
        @Override
        public Response intercept(Chain chain) throws IOException {

            Request request = chain.request();
            Log.e("++++++", "拦截前");
            Response response = chain.proceed(request);
            Log.e("++++++", "拦截后");
            return response;
        }
    };
    return interceptor;
}

//添加拦截器
private OkHttp() {
    File file = new File(Environment.getExternalStorageDirectory(), "cache1");
    client = new OkHttpClient().newBuilder()
            .readTimeout(3000, TimeUnit.SECONDS)
            .connectTimeout(3000, TimeUnit.SECONDS)
            .addInterceptor(getAppInterceptor())
            .cache(new Cache(file, 10 * 1024))
            .build();
}

//创建单例
public static OkHttp getInstance() {
    if (instance == null) {
        synchronized (OkHttp.class) {
            if (null == instance) {
                instance = new OkHttp();
            }
        }
    }
    return instance;
}

//封装doget方法
public void doGet(String url, final Class clazz, final NetCallBack netCallBack) {
    // 2. 创建一个请求对象
    Request request = new Request.Builder()
            .get()
            .url(url)
            .build();
    //创建call对象
    Call call = client.newCall(request);
    call.enqueue(new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {

        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {
            String string = response.body().string();
            Gson gson = new Gson();
            final Object o = gson.fromJson(string, clazz);
            handler.post(new Runnable() {
                @Override
                public void run() {
                    netCallBack.LoadSuccess(o);
                }
            });
        }
    });
}

//封装dopost请求
public void doPost(String url, final Class clazz, String name, String pwd, final NetCallBack netCallBack) {
    //新建okhttp对象
    client = new OkHttpClient();
    /**
     * 通过体传值
     */
    FormBody build = new FormBody.Builder()
            .add("phone", name)
            .add("pwd", pwd)
            .build();
    Request request = new Request.Builder()
            .url(url)
            .post(build)
            .build();
    Call call = client.newCall(request);
    call.enqueue(new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {

        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {
            String string = response.body().string();
            Gson gson = new Gson();
            final Object o = gson.fromJson(string, clazz);
            handler.post(new Runnable() {
                @Override
                public void run() {
                    netCallBack.LoadSuccess(o);
                }
            });
        }
    });
}

public interface NetCallBack {
    void LoadSuccess(Object obj);

    void LoadFail();
}

}

//适配器

package com.bawie.zhoukaomoni.adapter;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.bawie.zhoukaomoni.R;
import com.bawie.zhoukaomoni.bean.ShopBean;
import com.bumptech.glide.Glide;

/**

  • @Author:asus

  • @E-mail: 945574298@163.com

  • @Date:2019/3/16 15:22

  • @Description:描述信息
    */
    public class ShopAdapter extends RecyclerView.Adapter<ShopAdapter.ViewHolder> {
    Context context;
    ShopBean shopBean;

    public ShopAdapter(Context context, ShopBean shopBean){
    this.context = context;
    this.shopBean = shopBean;
    }
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(context).inflate(R.layout.shop_layout, parent, false);

     return new ViewHolder(view);
    

    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
    Glide.with(context).load(shopBean.getResult().getMlss().getCommodityList().get(position).getMasterPic()).into(holder.imageView);
    holder.textView.setText(shopBean.getResult().getMlss().getCommodityList().get(position).getCommodityName());

    }

    @Override
    public int getItemCount() {
    return shopBean.getResult().getMlss().getCommodityList().size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder {
    private ImageView imageView;
    private TextView textView;
    public ViewHolder(View view) {
    super(view);
    imageView = view.findViewById(R.id.image);
    textView = view.findViewById(R.id.textview);

     }
    

    }
    }

//mainactivity

package com.bawie.zhoukaomoni;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;

import com.bawie.zhoukaomoni.adapter.ShopAdapter;
import com.bawie.zhoukaomoni.bean.ShopBean;
import com.bawie.zhoukaomoni.mvp.presenter.IpresenterImpl;
import com.bawie.zhoukaomoni.mvp.view.Iview;

public class MainActivity extends AppCompatActivity implements Iview {
public static final String TAG=“MainActivity”;
private RecyclerView recyclerView;
private IpresenterImpl ipresenter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ipresenter = new IpresenterImpl();
     ipresenter.attchView(this);
     ipresenter.getPreData();
     initview();
}

private void initview() {
     recyclerView = findViewById(R.id.recycle);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));

}


@Override
public void getView(Object data) {
    if(data!=null){
        ShopBean shopBean= (ShopBean) data;

        ShopAdapter shopAdapter = new ShopAdapter(MainActivity.this, shopBean);
        recyclerView.setAdapter(shopAdapter);

    }
}

@Override
protected void onResume() {
    super.onResume();
}

}

CH341A编程器是一款广泛应用的通用编程设备,尤其在电子工程和嵌入式系统开发领域中,它被用来烧录各种类型的微控制器、存储器和其他IC芯片。这款编程器的最新版本为1.3,它的一个显著特点是增加了对25Q256等32M芯片的支持。 25Q256是一种串行EEPROM(电可擦可编程只读存储器)芯片,通常用于存储程序代码、配置数据或其他非易失性信息。32M在这里指的是存储容量,即该芯片可以存储32兆位(Mbit)的数据,换算成字节数就是4MB。这种大容量的存储器在许多嵌入式系统中都有应用,例如汽车电子、工业控制、消费电子设备等。 CH341A编程器的1.3版更新,意味着它可以与更多的芯片型号兼容,特别是针对32M容量的芯片进行了优化,提高了编程效率和稳定性。26系列芯片通常指的是Microchip公司的25系列SPI(串行外围接口)EEPROM产品线,这些芯片广泛应用于各种需要小体积、低功耗和非易失性存储的应用场景。 全功能版的CH341A编程器不仅支持25Q256,还支持其他大容量芯片,这意味着它具有广泛的兼容性,能够满足不同项目的需求。这包括但不限于微控制器、EPROM、EEPROM、闪存、逻辑门电路等多种类型芯片的编程。 使用CH341A编程器进行编程操作时,首先需要将设备通过USB连接到计算机,然后安装相应的驱动程序和编程软件。在本例中,压缩包中的"CH341A_1.30"很可能是编程软件的安装程序。安装后,用户可以通过软件界面选择需要编程的芯片类型,加载待烧录的固件或数据,然后执行编程操作。编程过程中需要注意的是,确保正确设置芯片的电压、时钟频率等参数,以防止损坏芯片。 CH341A编程器1.3版是面向电子爱好者和专业工程师的一款实用工具,其强大的兼容性和易用性使其在众多编程器中脱颖而出。对于需要处理25Q256等32M芯片的项目,或者26系列芯片的编程工作,CH341A编程器是理想的选择。通过持续的软件更新和升级,它保持了与现代电子技术同步,确保用户能方便地对各种芯片进行编程和调试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值