MVP+Volley:get请求接口:RecyclerView展示数据 Glide圆角图+webview:js交互

<MVP框架>

接口拼接
在MainActivity中调用 传入数据

public class API {
    public String toUrl(String keyword,int page,int count){
        String url="http://172.17.8.100/small/commodity/v1/findCommodityByKeyword?keyword="+keyword+"&page="+page+"&count="+count;
        return url;
    }
}

MyApp 上下文

public class MyApp  extends Application {
    public static Context context;

    @Override
    public void onCreate() {
        super.onCreate();
        context=this;
    }
}

## Base

------activity和presenter互相继承

BaseActivity

------BaseActivityr泛型继承BasePresente

public abstract class BaseActivity<P extends BasePresenter> extends AppCompatActivity implements Icontract.IView {
    public P p;


    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(Layout());
        p=Payout();
        //绑定
        if (p!=null){
            p.attach(this);
        }
        //初始化控件
        initVeiw();
        //设置数据
        initData();
    }

    protected abstract void initData();

    protected abstract void initVeiw();

    protected abstract int Layout();
    protected abstract P Payout();
    //解绑方法

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (p!=null){
            p.unbind();
            p=null;
        }
    }
}

BasePresenter

------BasePresenter泛型继承BaseActivity

public class BasePresenter<V extends BaseActivity> {
    public V v;
    //绑定方法
    public void attach(V v){
        this.v=v;
    }
    //解绑方法
    public void unbind(){
        if(v!=null){
            v=null;
        }
    }
}

MainActivity

------继承BaseActivity

public class MainActivity extends BaseActivity implements MyView.onClick{

     MyPresenter myPresenter;
    RecyclerView recyclerView;
    MyView my_view;
    //设置数据
    @Override
    protected void initData() {
        boolean net = VolleyUtil.getInstance().getNet(this);
        if (net){
            //有网
            API api=new API();
            String str = URLEncoder.encode("板鞋");
            myPresenter.success(api.toUrl(str,1,5));
        }else {
            Toast.makeText(this, "请检查网络", Toast.LENGTH_SHORT).show();
        }
    }
    //初始化控件
    @Override
    protected void initVeiw() {
        recyclerView=findViewById(R.id.recy_activity);
        StaggeredGridLayoutManager gridLayoutManager=new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(gridLayoutManager);
//        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        my_view=findViewById(R.id.my_view);
        my_view.setClick(this);
    }

    @Override
    protected int Layout() {
        return R.layout.activity_main;
    }

    @Override
    protected BasePresenter Payout() {
        myPresenter = new MyPresenter();
        return myPresenter;
    }

    @Override
    public void success(Shop shop) {
        MyAdapter adapter=new MyAdapter(shop.getResult(),this);
        recyclerView.setAdapter(adapter);
    }

 //搜索框点击事件
    @Override
    public void setclick() {
            String trim = my_view.edit_ss.getText().toString();
            //判断
            if (trim.isEmpty()){
                Toast.makeText(this, "输入为空", Toast.LENGTH_SHORT).show();
            }else {
                API api=new API();
                String str = URLEncoder.encode(trim);
                myPresenter.success(api.toUrl(str,1,5));
            }
    }
}

P层
MyPresenter

------mypersenter实例化model层
------调用model中的方法
------接口回调

public class MyPresenter extends BasePresenter implements Icontract.IPresenter {
    MyModel model;

    public MyPresenter() {
        model=new MyModel();
    }

    @Override
    public void success(String url) {

        model.getGet(url, new Icontract.CallBack() {
            @Override
            public void success(String json) {
                //解析
                Gson gson=new Gson();
                Shop shop = gson.fromJson(json, Shop.class);
                MainActivity activity= (MainActivity) v;
                activity.success(shop);
            }

            @Override
            public void error(String er) {

            }
        });
    }
}

Mymodel

------model调用volley中的方法+接口回调callback

public class MyModel  {
    public void getGet(String url, Icontract.CallBack callBack){
        VolleyUtil.getInstance().toGet(url, callBack);
    }
}

Icontract契约类

public interface Icontract {
    //V
    interface IView{
        void success(Shop shop);
    }

    //p层
    interface IPresenter{
        void success(String url);
    }
    //callBack
    interface CallBack{
        void success(String json);
        void error(String er);
    }
}

网络工具类Volley

public class VolleyUtil {
    //创建队列
    RequestQueue queue= Volley.newRequestQueue(MyApp.context);
    //单例模式
    public static VolleyUtil util=new VolleyUtil();
    //私有构造
    private VolleyUtil() {
    }
    public static VolleyUtil getInstance(){
        return util;
    }
    //网络
    public boolean getNet(Context context){
        ConnectivityManager manager= (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo info = manager.getActiveNetworkInfo();
        if (info!=null){
            return info.isConnected();
        }
        return false;
    }
    //Get请求
    public void toGet(String url, final Icontract.CallBack callBack){
        StringRequest request=new StringRequest(0, url, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                callBack.success(response);
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                callBack.error(error.getMessage());
            }
        });
        queue.add(request);
    }

}

bean类
------进入接口

public class Shop {


    private String message;
    private String status;
    private List<ResultBean> result;

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public List<ResultBean> getResult() {
        return result;
    }

    public void setResult(List<ResultBean> result) {
        this.result = result;
    }

    public static class ResultBean {


        private int commodityId;
        private String commodityName;
        private String masterPic;
        private int price;
        private int saleNum;

        public int getCommodityId() {
            return commodityId;
        }

        public void setCommodityId(int commodityId) {
            this.commodityId = commodityId;
        }

        public String getCommodityName() {
            return commodityName;
        }

        public void setCommodityName(String commodityName) {
            this.commodityName = commodityName;
        }

        public String getMasterPic() {
            return masterPic;
        }

        public void setMasterPic(String masterPic) {
            this.masterPic = masterPic;
        }

        public int getPrice() {
            return price;
        }

        public void setPrice(int price) {
            this.price = price;
        }

        public int getSaleNum() {
            return saleNum;
        }

        public void setSaleNum(int saleNum) {
            this.saleNum = saleNum;
        }
    }
}

搜索框 点击搜索
在activitiy中

public class MyView extends LinearLayout {

    Button but_ss;
    public EditText edit_ss;
    onClick click;
    public MyView(Context context, AttributeSet attrs) {
        super(context, attrs);
        View view= LayoutInflater.from(context).inflate(R.layout.ss_layout,this);
        but_ss=view.findViewById(R.id.but_ss);
        edit_ss=view.findViewById(R.id.edit_ss);
            but_ss.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    click.setclick();
                }
            });


    }

    public void setClick(onClick click){
        this.click=click;
    }
    public interface onClick{
        void setclick();
    }

}

适配器
--------点击条目跳转到Main2
--------在适配器中接口回调点击

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.Holder> {
    List<Shop.ResultBean> list;
    Context context;
    MainActivity activity;

    public MyAdapter(List<Shop.ResultBean> list, Context context) {
        this.list = list;
        this.context = context;
        this.activity= (MainActivity) context;
    }
    @NonNull
    @Override
    public Holder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View inflate = LayoutInflater.from(context).inflate(R.layout.item_layout, null);
        return new Holder(inflate);
    }

    @Override
    public void onBindViewHolder(@NonNull Holder holder, int i) {
        holder.textView1.setText(list.get(i).getCommodityName());
        holder.textView2.setText("价格:"+list.get(i).getPrice()+"");
        Glide.with(context)
                .load(list.get(i).getMasterPic())
                .apply(RequestOptions.bitmapTransform(new RoundedCorners(10)))
                .error(R.drawable.ic_launcher_background)
                .placeholder(R.mipmap.ic_launcher_round)
                .into(holder.imageView);

		*//给linnerlayout一个id
        //设置点击事件跳转到webview页面*
        
        holder.linner1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(context, Main2Activity.class);
                activity.startActivity(intent);
            }
        });
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    class Holder extends RecyclerView.ViewHolder {
        ImageView imageView;
        TextView textView1;
        LinearLayout linner1;
        TextView textView2;
        public Holder(@NonNull View itemView) {
            super(itemView);
            linner1=itemView.findViewById(R.id.linner1);
            imageView=itemView.findViewById(R.id.img_layout);
            textView1=itemView.findViewById(R.id.item_text1);
            textView2=itemView.findViewById(R.id.item_text2);
        }
    }
}

Webview js:android互相调用

public class Main2Activity extends AppCompatActivity implements View.OnClickListener {

    private Button ac2_but1;
    private Button ac2_but2;
    private WebView web_view;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        initView();
    }

    @SuppressLint("JavascriptInterface")
    private void initView() {
        ac2_but1 =findViewById(R.id.ac2_but1);
        ac2_but2 = findViewById(R.id.ac2_but2);
        web_view =  findViewById(R.id.web_view);
        //允许加载js
        web_view.getSettings().setJavaScriptEnabled(true);
        //加载网页
        web_view.loadUrl("https://abnerming8.github.io/abnerming.html");
        //允许弹框
        web_view.setWebChromeClient(new WebChromeClient());


        ac2_but1.setOnClickListener(this);
        ac2_but2.setOnClickListener(this);
        web_view.addJavascriptInterface(new Oclick(),"android");
    }
    class Oclick{
        @SuppressLint("JavascriptInterface")
        @JavascriptInterface
        void show(){
            Toast.makeText(Main2Activity.this, "郝世龙", Toast.LENGTH_SHORT).show();
        }
    }
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.ac2_but1:
                web_view.loadUrl("javascript:changeColor('#d43c3c')");
                break;
            case R.id.ac2_but2:
                web_view.loadUrl("javascript:toast()");
                break;
        }
    }
}

WebView加载地址
—https://abnerming8.github.io/abnerming.html—

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值