MVP+分类

//导入依赖

 //Recyclerview是listview的升级版
    implementation 'com.android.support:recyclerview-v7:28.0.0'
    //okhttp
    implementation 'com.squareup.okhttp3:okhttp:3.10.0'
    //Glide请求网络图片
    implementation 'com.github.bumptech.glide:glide:3.7.0'
    implementation 'com.google.code.gson:gson:2.2.4'
//添加权限

 <uses-permission android:name="android.permission.INTERNET"/>
//主页面布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    tools:context=".MainActivity">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recy"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="2"
        />

    <ScrollView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="8"
        >
        <LinearLayout
            android:id="@+id/linea"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            ></LinearLayout>
    </ScrollView>

</LinearLayout>
//左边布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="服务费"
        android:layout_gravity="center"
        />
</LinearLayout>

//右边布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >

    <ImageView
        android:id="@+id/image"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:src="@drawable/ic_launcher_background"
        />

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="吊袜带"
        android:layout_marginLeft="20dp"
        />

</LinearLayout>

//左边解析后的bean类
package com.example.fenlei2.bean;

import java.util.List;


public class LeftBean {
    private String msg;
    private String code;
    private List<DataBean> data;

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public List<DataBean> getData() {
        return data;
    }

    public void setData(List<DataBean> data) {
        this.data = data;
    }

    public static class DataBean {
        /**
         * cid : 1
         * createtime : 2017-10-10T19:41:39
         * icon : http://120.27.23.105/images/category/shop.png
         * ishome : 1
         * name : 京东超市
         */

        private int cid;
        private String createtime;
        private String icon;
        private int ishome;
        private String name;

        public int getCid() {
            return cid;
        }

        public void setCid(int cid) {
            this.cid = cid;
        }

        public String getCreatetime() {
            return createtime;
        }

        public void setCreatetime(String createtime) {
            this.createtime = createtime;
        }

        public String getIcon() {
            return icon;
        }

        public void setIcon(String icon) {
            this.icon = icon;
        }

        public int getIshome() {
            return ishome;
        }

        public void setIshome(int ishome) {
            this.ishome = ishome;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }
}

//右边解析数据到bean类
package com.example.fenlei2.bean;

import java.util.List;


public class RightBean {
    private String msg;
    private String code;
    private List<DataBean> data;

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public List<DataBean> getData() {
        return data;
    }

    public void setData(List<DataBean> data) {
        this.data = data;
    }

    public static class DataBean {
        /**
         * cid : 1
         * list : [{"icon":"http://120.27.23.105/images/icon.png","name":"月饼","pcid":1,"pscid":1},{"icon":"http://120.27.23.105/images/icon.png","name":"坚果炒货","pcid":1,"pscid":2},{"icon":"http://120.27.23.105/images/icon.png","name":"糖巧","pcid":1,"pscid":3},{"icon":"http://120.27.23.105/images/icon.png","name":"休闲零食","pcid":1,"pscid":4},{"icon":"http://120.27.23.105/images/icon.png","name":"肉干肉脯","pcid":1,"pscid":5},{"icon":"http://120.27.23.105/images/icon.png","name":"饼干蛋糕","pcid":1,"pscid":6},{"icon":"http://120.27.23.105/images/icon.png","name":"蜜饯果干","pcid":1,"pscid":7},{"icon":"http://120.27.23.105/images/icon.png","name":"无糖食品","pcid":1,"pscid":8}]
         * name : 休闲零食
         * pcid : 1
         */

        private String cid;
        private String name;
        private String pcid;
        private List<ListBean> list;

        public String getCid() {
            return cid;
        }

        public void setCid(String cid) {
            this.cid = cid;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getPcid() {
            return pcid;
        }

        public void setPcid(String pcid) {
            this.pcid = pcid;
        }

        public List<ListBean> getList() {
            return list;
        }

        public void setList(List<ListBean> list) {
            this.list = list;
        }

        public static class ListBean {
            /**
             * icon : http://120.27.23.105/images/icon.png
             *              * name : 月饼
             *              * pcid : 1
             *              * pscid : 1
             */

            private String icon;
            private String name;
            private int pcid;
            private int pscid;

            public String getIcon() {
                return icon;
            }

            public void setIcon(String icon) {
                this.icon = icon;
            }

            public String getName() {
                return name;
            }

            public void setName(String name) {
                this.name = name;
            }

            public int getPcid() {
                return pcid;
            }

            public void setPcid(int pcid) {
                this.pcid = pcid;
            }

            public int getPscid() {
                return pscid;
            }

            public void setPscid(int pscid) {
                this.pscid = pscid;
            }
        }
    }
}

//左边数据adapter

package com.example.fenlei2.adapter;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.example.fenlei2.R;
import com.example.fenlei2.bean.LeftBean;

import java.util.ArrayList;
import java.util.List;


public class LeftAdapter extends RecyclerView.Adapter<LeftAdapter.ViewHolder> {

    Context mContext;
    List<LeftBean.DataBean> list;

    public LeftAdapter(Context context) {
        mContext = context;
        list = new ArrayList<>();
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view = View.inflate(mContext, R.layout.left_text, null);
        ViewHolder viewHolder = new ViewHolder(view);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder viewHolder, final int i) {
        viewHolder.text.setText(list.get(i).getName());
        viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(mOnLeftadapter != null){
                    mOnLeftadapter.returnid(list.get(i).getCid()+"");
                }
            }
        });
    }

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

    public void setData(List<LeftBean.DataBean> data) {
        list = data;
        notifyDataSetChanged();
    }

    public class ViewHolder extends RecyclerView.ViewHolder {
        TextView text;
        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            text = itemView.findViewById(R.id.text);
        }
    }
    //定义接口返回id
    public interface onLeftadapter{
        void returnid(String s);
    }

    public onLeftadapter mOnLeftadapter;

    public void setOnLeftadapter(onLeftadapter onLeftadapter){
        this.mOnLeftadapter = onLeftadapter;
    }
}

//右边数据adapter
package com.example.fenlei2.adapter;

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

import com.bumptech.glide.Glide;
import com.example.fenlei2.R;
import com.example.fenlei2.bean.RightBean;

import org.w3c.dom.Text;

import java.util.ArrayList;
import java.util.List;

public class RightAdapter extends RecyclerView.Adapter<RightAdapter.ViewHolder> {

    Context mContext;
    List<RightBean.DataBean.ListBean> list;

    public RightAdapter(Context context) {
        mContext = context;
        list = new ArrayList<>();
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view = View.inflate(mContext,R.layout.right_text,null);
        ViewHolder viewHolder = new ViewHolder(view);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
        viewHolder.text.setText(list.get(i).getName());
        Glide.with(mContext).load(list.get(i).getIcon()).into(viewHolder.image);
    }

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

    public void setData(List<RightBean.DataBean.ListBean> list) {
        this.list.addAll(list);
    }


    public class ViewHolder extends RecyclerView.ViewHolder {
        ImageView image;
        TextView text;
        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            image = itemView.findViewById(R.id.image);
            text = itemView.findViewById(R.id.text);
        }
    }
}

//封装okhttp
package com.example.fenlei2.utils;

import android.os.Handler;
import android.os.Looper;

import com.example.fenlei2.LoggingInterceptor;

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

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

public class OkHttps {
    Handler handler;
    private final OkHttpClient mOkHttpClient;
    private static OkHttps mOkHttps;

    private OkHttps() {
        handler = new Handler(Looper.getMainLooper());

        LoggingInterceptor loggingInterceptor = new LoggingInterceptor();  //日志拦截器
        mOkHttpClient = new OkHttpClient.Builder()
                .addInterceptor(loggingInterceptor)   //设置日志拦截器
                .connectTimeout(5000, TimeUnit.MILLISECONDS)
                .readTimeout(5000,TimeUnit.MILLISECONDS)
                .writeTimeout(5000,TimeUnit.MILLISECONDS)
                .build();

    }

    public static OkHttps getInstance(){
        if (mOkHttps==null){
            synchronized (OkHttps.class){
                if (mOkHttps==null){
                    return mOkHttps=new OkHttps();
                }
            }
        }
        return mOkHttps;
    }

    public interface OkCallback{
        void onResponse(String json);

        void onFailure(Exception e);

    }

    public void doPost(String url, Map<String,String> map, final OkCallback okCallback){
        FormBody.Builder builder = new FormBody.Builder();
        if (map!=null){
            for (String key:map.keySet()){
                builder.add(key,map.get(key));
            }
        }

        FormBody formBody = builder.build();

        final Request request = new Request.Builder()
                .post(formBody)
                .url(url)
                .build();

        Call call = mOkHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, final IOException e) {
                if (okCallback!=null){
                    handler.post(new Runnable() {
                        @Override
                        public void run() {

                            okCallback.onFailure(e);
                        }
                    });
                }
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {

                try {
                    if (response!=null && response.isSuccessful()){
                        final String json = response.body().string();
                        handler.post(new Runnable() {
                            @Override
                            public void run() {
                                if (okCallback!=null){

                                    okCallback.onResponse(json);
                                    return;
                                }
                            }
                        });
                    }
                }catch (IOException e){
                    e.printStackTrace();
                }
                if (okCallback!=null){
                    okCallback.onFailure(new Exception("网络异常"));
                }
            }
        });

    }
    public void doGet(String url, final OkCallback okCallback){
        Request request = new Request.Builder()
                .url(url)
                .build();

        Call call = mOkHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, final IOException e) {
                if (okCallback != null) {
                    //切换到主线程
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            okCallback.onFailure(e);
                        }
                    });
                }
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {

                try {
                    if (response != null && response.isSuccessful()) {
                        final String json = response.body().string();
                        handler.post(new Runnable() {
                            @Override
                            public void run() {
                                if (okCallback != null) {
                                    okCallback.onResponse(json);
                                }

                            }
                        });
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });
    }
}

//拦截器
package com.example.fenlei2;

import java.io.IOException;

import okhttp3.Interceptor;
import okhttp3.Request;
import okhttp3.Response;

/**
 * 日志拦截器类,请求来了,先在这里进行处理,可以得到发请求到得到请求消耗多久的时间
 * 作用:可以排查网络请求速度慢的根本原因
 *  1.有可能是我们在请求网络时,客户端写了一堆业务逻辑
 *  2.有可能是服务器端,写的有问题
 *  3.有可能就是网速不给力
 */
public  class LoggingInterceptor implements Interceptor {
    @Override
    public Response intercept(Chain chain) throws IOException {
        //拿到Request对象
        Request request = chain.request();

        long t1 = System.nanoTime();
        System.out.println(" request  = " + String.format("Sending request %s on %s%n%s",
                request.url(), chain.connection(), request.headers()));

        //拿到Response对象
        Response response = chain.proceed(request);

        long t2 = System.nanoTime();
        //得出请求网络,到得到结果,中间消耗了多长时间
        System.out.println("response  " + String.format("Received response for %s in %.1fms%n%s",
                response.request().url(), (t2 - t1) / 1e6d, response.headers()));
        return response;
    }
}
//创建presenter层

package com.example.fenlei2.presenter;

import com.example.fenlei2.bean.RightBean;
import com.example.fenlei2.utils.OkHttps;
import com.google.gson.Gson;

import java.util.List;
import java.util.Map;

 
public class Hzjpresenter {

    //把接口当参数
    public void hzjgetDate(String page, Map<String,String> map, final Getdopost getdopost){
        OkHttps.getInstance().doPost(page, map, new OkHttps.OkCallback() {
            @Override
            public void onResponse(String json) {
                RightBean rightBean = new Gson().fromJson(json, RightBean.class);
                List<RightBean.DataBean> data = rightBean.getData();
                getdopost.success(data);
            }

            @Override
            public void onFailure(Exception e) {

            }
        });
    }

    public interface Getdopost{

        //成功方法
        void success(List<RightBean.DataBean> data);
        //失败
        void failed();
    }
}

//mainactivity
package com.example.fenlei2;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.example.fenlei2.adapter.LeftAdapter;
import com.example.fenlei2.adapter.RightAdapter;
import com.example.fenlei2.bean.LeftBean;
import com.example.fenlei2.bean.RightBean;
import com.example.fenlei2.presenter.Hzjpresenter;
import com.example.fenlei2.utils.OkHttps;
import com.google.gson.Gson;

import org.w3c.dom.Text;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MainActivity extends AppCompatActivity {

    private RecyclerView recy;
    private LinearLayout linea;
    LeftAdapter mLeftAdapter;
    RightAdapter mRightAdapter;
    Hzjpresenter mHzjpresenter;
    //左边接口
    String url = "http://www.zhaoapi.cn/product/getCatagory";
    //右边接口
    String page = "http://www.zhaoapi.cn/product/getProductCatagory";
    //定一个变量
    String nid = null;


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

        initData();
    }

    private void initData() {

        //左边请求封装类进行展示    使用doget方法
        OkHttps.getInstance().doGet(url, new OkHttps.OkCallback() {
            @Override
            public void onResponse(String json) {
                //进行gson解析
                LeftBean leftBean = new Gson().fromJson(json, LeftBean.class);
                //new 一个实例adapter
                mLeftAdapter = new LeftAdapter(MainActivity.this);
                //解析完的数据进行获取
                List<LeftBean.DataBean> data = leftBean.getData();
                //添加到adapter   设置一个方法
                mLeftAdapter.setData(data);
                //设置适配器
                recy.setAdapter(mLeftAdapter);
                //recycleview使用LinearLayout布局
                recy.setLayoutManager(new LinearLayoutManager(MainActivity.this,LinearLayoutManager.VERTICAL,false));

                //调用左边设配器里面  设置的接口把id传过去
                mLeftAdapter.setOnLeftadapter(new LeftAdapter.onLeftadapter() {
                    @Override
                    public void returnid(String s) {
                        //让变量等于传过来id = s
                        nid = s;

                        //在创建一个方法展示右边数据
                        getData();
                    }
                });
            }

            @Override
            public void onFailure(Exception e) {

            }
        });
    }

    private void getData() {
        //创建map
         Map<String,String> map = new HashMap<>();
         //map.put   把接口cid   和传过来的id传进去
         map.put("cid",nid);

         //new 一个presenter层对象
        mHzjpresenter = new Hzjpresenter();
        //调用presenter层里面的方法
       mHzjpresenter.hzjgetDate(page, map, new Hzjpresenter.Getdopost() {
           @Override
           public void success(List<RightBean.DataBean> data) {

               //清除已有的缓存
               linea.removeAllViews();
               //进行for循环展示右边数据
               for (int i = 0; i <data.size() ; i++) {
                 RightBean.DataBean dataBean = data.get(i);
                 List<RightBean.DataBean.ListBean> list = dataBean.getList();
                 //创建一个新的textview
                    TextView textView = new TextView(MainActivity.this);
                    //把它设置为请求的name
                    textView.setText(list.get(i).getName());
                    //新建一个recycleview
                    RecyclerView recyclerView = new RecyclerView(MainActivity.this);
                    mRightAdapter = new RightAdapter(MainActivity.this);
                    //让新建的recycleview设置网格布局
                    recyclerView.setLayoutManager(new GridLayoutManager(MainActivity.this,3));
                    //在rightadapter里添加list
                    mRightAdapter.setData(list);
                    //设置适配器
                    recyclerView.setAdapter(mRightAdapter);
                    //更新数据
                    mRightAdapter.notifyDataSetChanged();
                    //添加textview
                    linea.addView(textView);
                    //添加recycleview
                    linea.addView(recyclerView);
                }
           }

           @Override
           public void failed() {

           }
       });

    }

    private void initView() {
        recy = (RecyclerView) findViewById(R.id.recy);
        linea = (LinearLayout) findViewById(R.id.linea);
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值