分类界面OKhttp

依赖

compile 'com.google.code.gson:gson:2.6.2
compile 'com.squareup.okhttp3:okhttp:3.3.0'
compile 'com.github.bumptech.glide:glide:3.7.0'
compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'
compile 'com.bm.photoview:library:1.4.1'
compile 'com.jcodecraeer:xrecyclerview:1.5.9'
<?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="com.example.dell.classifyjiemian.view.MainActivity">

  <ListView
     android:scrollbars="none"
      android:layout_width="100dp"
      android:layout_height="match_parent"
      android:id="@+id/classify_listview"/>
    <ListView

        android:scrollbars="none"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/rignt_classify"/>

</LinearLayout>

view包

public interface IMainView {
    //展示左侧的列表
    void showLeft(List<ClassifyBean.DataBean> list);
    //展示右侧数据
    void showRightData(List<SubclassifycationBean.DataBean> list);
    //获取cid
    int getCid(int position);
}
public class MainActivity extends AppCompatActivity implements IMainView{

    private Presenterlmpl presenterlmpl;
    private ListView left_listview;
    private ListView right_list;
    private List<ClassifyBean.DataBean> list;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化界面
        initViews();
       //调用presenter
        presenterlmpl = new Presenterlmpl();
        presenterlmpl.showLeftClassify(new Modellmpl(),this);
    }

    private void initViews() {
        left_listview = findViewById(R.id.classify_listview);
        right_list = findViewById(R.id.rignt_classify);
        //条目点击事件
        left_listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                //调用presenter
                presenterlmpl.showRightSubClassify(new Modellmpl(),MainActivity.this,i);
            }
        });
    }
    //展示左侧列表
    @Override
    public void showLeft(List<ClassifyBean.DataBean> list) {
        this.list=list;
        MyLeftAdapter myLeftAdapter=new MyLeftAdapter(this,list);
        left_listview.setAdapter(myLeftAdapter);
        //默认将第一个分类展示出来
        presenterlmpl.showRightSubClassify(new Modellmpl(),MainActivity.this,0);
    }
    //显示右侧数据
    @Override
    public void showRightData(List<SubclassifycationBean.DataBean> list) {
        MyRightAdapter myRightAdapter=new MyRightAdapter(MainActivity.this,list);
        right_list.setAdapter(myRightAdapter);

    }

    @Override
    public int getCid(int position) {
        int cid = list.get(position).getCid();
        return cid;
    }
}

model层

public interface IModel {
    //获取左侧列表数据
    void getFenLei(String url, Map<String,String> map,ClassifyListener classifyListener);
    //获取右侧列表数据
    void getsubclassifycation(String url,Map<String,String> map,SubclassifyListener subclassifyListener);
}
public class Modellmpl implements IModel{
    //获取左侧列表的数据
    @Override
    public void getFenLei(String url, Map<String, String> map, final ClassifyListener classifyListener) {
        OkHttpUtils okHttpUtils = OkHttpUtils.getInstance();
        okHttpUtils.okPost(url,map);
        okHttpUtils.setOkLoadListener(new OkLoadListener() {
            @Override
            public void okLoadSuccess(String json) {
                //判断,code=0;
                try {
                    JSONObject object = new JSONObject(json);
                    String code = object.getString("code");
                    if ("0".equals(code)){
                        classifyListener.getClassifySuccess(json);
                    }else {
                        classifyListener.getSubClassifyError(json);
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void okLoadError(String error) {
                classifyListener.getSubClassifyError(error);
            }
        });
    }

    @Override
    public void getsubclassifycation(String url, Map<String, String> map, final SubclassifyListener subclassifyListener) {
        OkHttpUtils okHttpUtils = OkHttpUtils.getInstance();
        okHttpUtils.okPost(url,map);
        okHttpUtils.setOkLoadListener(new OkLoadListener() {
            @Override
            public void okLoadSuccess(String json) {
                try {
                    JSONObject object = new JSONObject(json);
                    String code = object.getString("code");
                    if ("0".equals(code)){
                        subclassifyListener.getSubclassifySuccess(json);
                    }else {
                        subclassifyListener.getSubclassifyError(json);
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void okLoadError(String error) {
                subclassifyListener.getSubclassifyError(error);
            }
        });
    }
}

监听方法

public interface ClassifyListener {
    void getClassifySuccess(String json);

    void getSubClassifyError(String error);
}
public interface SubclassifyListener {
    void getSubclassifySuccess(String json);

    void getSubclassifyError(String error);
}

Presenter层

public interface IPresenter {
    //显示左侧列表
    void showLeftClassify(IModel iModel, IMainView iMainView);
    //显示右侧数据
    void showRightSubClassify(IModel iModel,IMainView iMainView,int position);
}
public class Presenterlmpl implements IPresenter {
    //显示左侧接口
    @Override
    public void showLeftClassify(IModel iModel, final IMainView iMainView) {
        iModel.getFenLei(HttpConfig.Classfy_Url, null, new ClassifyListener() {
            @Override
            public void getClassifySuccess(String json) {
                ClassifyBean classifyBean = new Gson().fromJson(json, ClassifyBean.class);
                List<ClassifyBean.DataBean> list = classifyBean.getData();
                //传入view
                iMainView.showLeft(list);
            }

            @Override
            public void getSubClassifyError(String error) {

            }
        });
    }
    //显示右侧数据
    @Override
    public void showRightSubClassify(IModel iModel, final IMainView iMainView, final int position) {
        Map<String,String> map=new HashMap<>();
        map.put("cid",iMainView.getCid(position)+"");
        iModel.getsubclassifycation(HttpConfig.subclassifycation_Url, map, new SubclassifyListener() {
            @Override
            public void getSubclassifySuccess(String json) {
                SubclassifycationBean subclassifycationBean = new Gson().fromJson(json, SubclassifycationBean.class);
                List<SubclassifycationBean.DataBean> list = subclassifycationBean.getData();
                iMainView.showRightData(list);
            }

            @Override
            public void getSubclassifyError(String error) {

            }
        });
    }
}
左侧数据适配器
public class MyLeftAdapter extends BaseAdapter{
    private Context context;
    private List<ClassifyBean.DataBean> list;

    public MyLeftAdapter(Context context, List<ClassifyBean.DataBean> list) {
        this.context = context;
        this.list = list;
    }

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

    @Override
    public Object getItem(int i) {
        return null;
    }

    @Override
    public long getItemId(int i) {
        return 0;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        MyLeftViewHolder myLeftViewHolder;
        if (view==null){
           view= View.inflate(context, R.layout.left_item_listview,null);
            TextView left_title = view.findViewById(R.id.left_title);
            myLeftViewHolder= new MyLeftViewHolder(left_title);
           view.setTag(myLeftViewHolder);
        }else {
            myLeftViewHolder= (MyLeftViewHolder) view.getTag();
        }
        myLeftViewHolder.getLeft_title().setText(list.get(i).getName());
        return view;
    }
    class MyLeftViewHolder{
        TextView left_title;

        public MyLeftViewHolder(TextView left_title) {
            this.left_title = left_title;
        }

        public TextView getLeft_title() {
            return left_title;
        }

        public void setLeft_title(TextView left_title) {
            this.left_title = left_title;
        }
    }
}

右侧适配器

public class MyRightAdapter extends BaseAdapter {
    private Context context;
    private List<SubclassifycationBean.DataBean> list;
    private MyViewHolder myViewHolder;

    public MyRightAdapter(Context context, List<SubclassifycationBean.DataBean> list) {
        this.context = context;
        this.list = list;
    }

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

    @Override
    public Object getItem(int i) {
        return null;
    }

    @Override
    public long getItemId(int i) {
        return 0;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        if (view==null){
            view=View.inflate(context, R.layout.item_rightlistview,null);
            TextView title = view.findViewById(R.id.subclassify);
            MyGridView gridView = view.findViewById(R.id.zi_gridview);
            myViewHolder = new MyViewHolder(title,gridView);
            view.setTag(myViewHolder);
        }else {
            myViewHolder= (MyViewHolder) view.getTag();
        }
        myViewHolder.getTitle().setText(list.get(i).getName());
        //设置GridView


        MyGridAdapter myGridAdapter=new MyGridAdapter(context,list.get(i).getList());
        myViewHolder.getGridView().setAdapter(myGridAdapter);
        return view;
    }
    class MyViewHolder {
        TextView title;
        MyGridView gridView;

        public MyViewHolder(TextView title, MyGridView gridView) {
            this.title = title;
            this.gridView = gridView;
        }

        public TextView getTitle() {
            return title;
        }

        public void setTitle(TextView title) {
            this.title = title;
        }

        public MyGridView getGridView() {
            return gridView;
        }

        public void setGridView(MyGridView gridView) {
            this.gridView = gridView;
        }
    }

}
//自定义gridview
public class MyGridView extends GridView {
    public MyGridView(Context context) {
        super(context);
    }

    public MyGridView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MyGridView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
    //改变测量模式

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int height = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, height);
    }
}

右侧布局

<?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">
        <TextView
            android:text="子分类"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/subclassify"/>
    <com.example.dell.classifyjiemian.view.MyGridView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/zi_gridview"
        android:numColumns="3"/>
</LinearLayout>
 
public class MyGridAdapter extends BaseAdapter {
    private Context context;
    private List<SubclassifycationBean.DataBean.ListBean> list;

    public MyGridAdapter(Context context, List<SubclassifycationBean.DataBean.ListBean> list) {
        this.context = context;
        this.list = list;
    }

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

    @Override
    public Object getItem(int i) {
        return null;
    }

    @Override
    public long getItemId(int i) {
        return 0;
    }

    @Override
    public View getView(final int i, View view, ViewGroup viewGroup) {
        MyViewHolder myViewHolder;
        if (view==null){
            view=View.inflate(context, R.layout.item_gridview,null);
            ImageView imagegrid = view.findViewById(R.id.gridviewPic);
            TextView tv = view.findViewById(R.id.gridview_tv);
            myViewHolder=new MyViewHolder(imagegrid,tv);
            view.setTag(myViewHolder);
        }else {
            myViewHolder= (MyViewHolder) view.getTag();
        }
        Glide.with(context).load(list.get(i).getIcon()).into(myViewHolder.getImagegrid());
        myViewHolder.getTv().setText(list.get(i).getName());
      myViewHolder.imagegrid.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View view) {
              Toast.makeText(context, ""+list.get(i).getPscid(), Toast.LENGTH_SHORT).show();
              Intent intent=new Intent(context,GoodsActivity.class);
              int pscid = list.get(i).getPscid();
              intent.putExtra("key",pscid);
              context.startActivity(intent);
          }
      });
        return view;
    }
    class MyViewHolder{
        ImageView imagegrid;
        TextView tv;

        public MyViewHolder(ImageView imagegrid, TextView tv) {
            this.imagegrid = imagegrid;
            this.tv = tv;
        }

        public ImageView getImagegrid() {
            return imagegrid;
        }

        public void setImagegrid(ImageView imagegrid) {
            this.imagegrid = imagegrid;
        }

        public TextView getTv() {
            return tv;
        }

        public void setTv(TextView tv) {
            this.tv = tv;
        }
    }
}

跳转到数据列表页面

public class GoodsActivity extends AppCompatActivity implements GoodsView{
    private static final String TAG = "GoodsActivity";
        private int page=1;
    private GoodPresenterlmpl goodPresenterlmpl;
    private XRecyclerView xrecycler;
    private List<GoodsBean.DataBean> list;
    private MyRecyclerAdapter myRecyclerAdapter;
    private int pscid1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_goods);
        xrecycler = findViewById(R.id.xrecycler);
        xrecycler.setPullRefreshEnabled(true);
        xrecycler.setLoadingMoreEnabled(true);
        //界面初始化
        initViews();

        //获取pscid
        Intent intent = getIntent();
        if (intent!=null){
            pscid1 = intent.getIntExtra("key", 0);
            Log.d(TAG, "------: "+pscid1);
        }

        goodPresenterlmpl = new GoodPresenterlmpl();
        goodPresenterlmpl.showGoodsList(new GoodsModellmpl(),this);


    }

    private void initViews() {

        xrecycler.setLayoutManager(new LinearLayoutManager(this));
        xrecycler.setLoadingListener(new XRecyclerView.LoadingListener() {
            @Override
            public void onRefresh() {
                page=1;
                goodPresenterlmpl.showGoodsListFresh(new GoodsModellmpl(),GoodsActivity.this);
            }

            @Override
            public void onLoadMore() {
                    page++;
                    goodPresenterlmpl.showGoodsListLoadMore(new GoodsModellmpl(),GoodsActivity.this);
            }
        });
    }
//商品展示
    @Override
    public void showData(List<GoodsBean.DataBean> list) {
        Log.d(TAG, "showData: 商品展示"+list.toString());
        this.list=list;
        myRecyclerAdapter = new MyRecyclerAdapter(GoodsActivity.this,list);
        xrecycler.setAdapter(myRecyclerAdapter);
        //设置条目点击事件
        myRecyclerAdapter.setOnMyItemClick(new MyRecyclerAdapter.MyItemClickListener() {
            @Override
            public void onItemClick(View view, int pid) {
                Intent intent=new Intent(GoodsActivity.this,DetailActivity.class);
                intent.putExtra("pid",pid);
                startActivity(intent);
            }
        });
    }

    @Override
    public void showGoodListFresh(List<GoodsBean.DataBean> list) {
        this.list=list;
        myRecyclerAdapter=new MyRecyclerAdapter(GoodsActivity.this,list);
        xrecycler.setAdapter(myRecyclerAdapter);
        xrecycler.refreshComplete();

    }

    @Override
    public void showGoodListLoadMore(List<GoodsBean.DataBean> list) {
        this.list.addAll(list);
        myRecyclerAdapter.notifyDataSetChanged();
        xrecycler.loadMoreComplete();
    }

    @Override
    public int getPscid() {
        return pscid1;
    }

    @Override
    public int getPage() {
        return page;
    }
}
public interface GoodsView {
    //展示数据
    void showData(List<GoodsBean.DataBean> list);
    void showGoodListFresh(List<GoodsBean.DataBean> list);
    void showGoodListLoadMore(List<GoodsBean.DataBean> list);
    //获取pscid
    int getPscid();
    //获取page
    int getPage();
}

Model层

public interface GoodIModel {
    //商品展示列表
    void getGoodList(String url, Map<String,String> map, GetGoodsListener getGoodsListener);
    void getGoodListFresh(String url,Map<String,String> map,GetGoodsListener getGoodsListener);
    void getGoodListLoadMore(String url,Map<String,String> map,GetGoodsListener getGoodsListener);
    //详情页的商品展示
    void getDetail(String url,Map<String,String> map,GetDetailListener getDetailListener);
    //添加购物车
    void addToCart(String url,Map<String,String> map,AddListener addListener);
}
public class GoodsModellmpl implements GoodIModel {
    private static final String TAG = "GoodsModellmpl";
    //获取商品列表
    @Override
    public void getGoodList(String url, Map<String, String> map, final GetGoodsListener getGoodsListener) {
       //请求数据
        OkHttpUtils okHttpUtils = OkHttpUtils.getInstance();
        okHttpUtils.okPost(url,map);
        okHttpUtils.setOkLoadListener(new OkLoadListener() {
            @Override
            public void okLoadSuccess(String json) {
                try {
                    JSONObject jsonObject = new JSONObject(json);
                    Log.d(TAG, "okLoadSuccess: mceng00000000"+json);
                    String code = jsonObject.getString("code");
                    if ("0".equals(code)){
                        getGoodsListener.getSuccess(json);
                        Log.d(TAG, "okLoadSuccess: 成功======0"+json);
                    }else {
                        getGoodsListener.getError(json);
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void okLoadError(String error) {
                getGoodsListener.getError(error);
                Log.d(TAG, "okLoadSuccess: 成功======0"+ error.toString());
            }
        });
    }

    @Override
    public void getGoodListFresh(String url, Map<String, String> map, final GetGoodsListener getGoodsListener) {
        OkHttpUtils okHttpUtils = OkHttpUtils.getInstance();
        okHttpUtils.okPost(url, map);
        okHttpUtils.setOkLoadListener(new OkLoadListener() {
            @Override
            public void okLoadSuccess(String json) {
                try {
                    JSONObject object = new JSONObject(json);
                    String code = object.getString("code");
                    if ("0".equals(code)){
                        getGoodsListener.getSuccess(json);
                    }else {
                        getGoodsListener.getError(json);
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void okLoadError(String error) {
                getGoodsListener.getSuccess(error);
            }
        });
    }

    @Override
    public void getGoodListLoadMore(String url, Map<String, String> map, final GetGoodsListener getGoodsListener) {
        OkHttpUtils okHttpUtils = OkHttpUtils.getInstance();
        okHttpUtils.okPost(url,map);
        okHttpUtils.setOkLoadListener(new OkLoadListener() {
            @Override
            public void okLoadSuccess(String json) {
                try {
                    JSONObject jsonObject = new JSONObject(json);
                    String code = jsonObject.getString("code");
                    if ("0".equals(code)){
                        getGoodsListener.getSuccess(json);
                    }else {
                        getGoodsListener.getError(json);
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void okLoadError(String error) {
                getGoodsListener.getError(error);
            }
        });
    }
    //实现详情页的数据请求
    @Override
    public void getDetail(String url, Map<String, String> map, final GetDetailListener getDetailListener) {
        OkHttpUtils okHttpUtils = OkHttpUtils.getInstance();
        okHttpUtils.okPost(url,map);
        okHttpUtils.setOkLoadListener(new OkLoadListener() {
            @Override
            public void okLoadSuccess(String json) {
                try {
                    JSONObject jsonObject = new JSONObject(json);
                    String code = jsonObject.getString("code");
                    if ("0".equals(code)){
                        getDetailListener.getDetailSuccess(json);
                    }else {
                        getDetailListener.getDetailError(json);
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void okLoadError(String error) {

            }
        });

    }
//实现添加购物车的数据请求
    @Override
    public void addToCart(String url, Map<String, String> map, final AddListener addListener) {
        Log.e("Uri",url);
        OkHttpUtils okHttpUtils = OkHttpUtils.getInstance();
        for (String key:map.keySet()){
            Log.d("MAP",map.get(key));
        }

        okHttpUtils.okPost(url, map);// 这里的路径 写死了
        okHttpUtils.setOkLoadListener(new OkLoadListener() {
            @Override
            public void okLoadSuccess(String json) {
                Log.d(TAG, "okLoadSuccess: m层------"+json);
                try {
                    JSONObject jsonObject = new JSONObject(json);
                    String code = jsonObject.getString("code");
                    if (code.equals("0")){
                        addListener.addSuccess();
                    }else {
                        addListener.addError();
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void okLoadError(String error) {
                Log.d(TAG, "okLoadError: 错误-------"+error);
            }
        });
    }
}

监听类

public interface GetGoodsListener {
    //获取成功
    void getSuccess(String json);
    //获取失败
    void getError(String error);
}
public interface GetDetailListener {

    void getDetailSuccess(String json);

    void getDetailError(String error);
}
public interface AddListener {
    void addSuccess();

    void addError();
}

p层

public interface GoodsIPresenter {
    //显示子商品下的商品列表
    void showGoodsList(GoodIModel goodIModel, GoodsView goodsView);
    void showGoodsListFresh(GoodIModel goodIModel, GoodsView goodsView);
    void showGoodsListLoadMore(GoodIModel goodIModel, GoodsView goodsView);

    //显示详情页
    void showDetail(GoodIModel goodIModel, IDetailView iDetailView);
    //添加购物车
    void addCart(GoodIModel goodIModel, IDetailView iDetailView);
}
public class GoodPresenterlmpl implements GoodsIPresenter{


    @Override
    public void showGoodsList(GoodIModel goodIModel, final GoodsView goodsView) {
        Map<String,String> map=new HashMap<>();
        map.put("pscid",goodsView.getPscid()+"");
        Log.d(TAG, "showGoodsListFresh: pscid===="+goodsView.getPscid());
        goodIModel.getGoodList(HttpConfig.sub_goodslist_url, map, new GetGoodsListener() {
            @Override
            public void getSuccess(String json) {
                GoodsBean goodsBean = new Gson().fromJson(json, GoodsBean.class);
                List<GoodsBean.DataBean> list = goodsBean.getData();
                goodsView.showData(list);
            }

            @Override
            public void getError(String error) {

            }
        });
    }
//刷新
    @Override
    public void showGoodsListFresh(final GoodIModel goodIModel, final GoodsView goodsView) {
        Map<String,String> map=new HashMap<>();
        map.put("pscid",goodsView.getPscid()+"");
        Log.d(TAG, "showGoodsListFresh: pscid===="+goodsView.getPscid());
        map.put("page",goodsView.getPage()+"");
        goodIModel.getGoodList(HttpConfig.sub_goodslist_url, map, new GetGoodsListener() {
            @Override
            public void getSuccess(String json) {
                GoodsBean goodsBean = new Gson().fromJson(json, GoodsBean.class);
                List<GoodsBean.DataBean> list = goodsBean.getData();
                //刷新
                goodsView.showGoodListFresh(list);
            }

            @Override
            public void getError(String error) {
                Log.d(TAG, "getError: ==========="+error);
            }
        });
    }

    @Override
    public void showGoodsListLoadMore(GoodIModel goodIModel, final GoodsView goodsView) {
        Map<String,String> map=new HashMap<>();
        map.put("pscid",goodsView.getPscid()+"");
        map.put("page",goodsView.getPage()+"");
        goodIModel.getGoodList(HttpConfig.sub_goodslist_url, map, new GetGoodsListener() {
            @Override
            public void getSuccess(String json) {
                Log.d(TAG, "getSuccess: p层====="+json);
                GoodsBean goodsBean = new Gson().fromJson(json, GoodsBean.class);
                List<GoodsBean.DataBean> list = goodsBean.getData();
                goodsView.showGoodListLoadMore(list);
            }

            @Override
            public void getError(String error) {

            }
        });
    }
//显示详情
    @Override
    public void showDetail(GoodIModel goodIModel, final IDetailView iDetailView) {
        Map<String,String> map=new HashMap<>();
        map.put("pid",iDetailView.getPid()+"");
        goodIModel.getDetail(HttpConfig.Dailtel_url, map, new GetDetailListener() {
            @Override
            public void getDetailSuccess(String json) {
                DetailBean detailBean = new Gson().fromJson(json, DetailBean.class);
                DetailBean.DataBean data = detailBean.getData();
                iDetailView.showGoodDetail(data);
            }

            @Override
            public void getDetailError(String error) {

            }
        });
    }
    //添加购物车
    @Override
    public void addCart(GoodIModel goodIModel, final IDetailView iDetailView) {
        Map<String,String> map=new HashMap<>();
        map.put("pid",iDetailView.getPid()+"");
        map.put("uid","71");
      goodIModel.addToCart(HttpConfig.addcart_url, map, new AddListener() {
          @Override
          public void addSuccess( ) {
              iDetailView.addSuccess();
          }

          @Override
          public void addError( ) {
            iDetailView.addError();
          }
      });
    }
}

详情页面

public class DetailActivity extends AppCompatActivity implements IDetailView,View.OnClickListener{
    private static final String TAG = "DetailActivity";
    private int pid;
    private ImageView detail_image;
    private Button addcart;
    private TextView detail_title;
    private ViewPager viewpager;
    private MyHandler myHandler = new MyHandler();
    private static List<ImageView> points = new ArrayList<>();
    private List<ImageView> imageViews= new ArrayList<>();;
    private LinearLayout buttom;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_detail);
        Intent intent = getIntent();
        if (intent!=null){
            pid = intent.getIntExtra("pid", 0);
            Log.d(TAG, "onCreate: aaaa"+pid);
        }
        //初始化页面
        initView();
        new GoodPresenterlmpl().showDetail(new GoodsModellmpl(),this);
        autoPlay();
        MyCire();
    }

    private void initView() {
      //  detail_image = findViewById(R.id.detail_image);
        buttom = findViewById(R.id.buttom);
        addcart = findViewById(R.id.detail_addcart);
        detail_title = findViewById(R.id.detail_title);
       viewpager= findViewById(R.id.viewpager);
        addcart.setOnClickListener(this);
    }

    @Override
    public void showGoodDetail(DetailBean.DataBean dataBean) {

        String[] images = dataBean.getImages().split("\\|");
        for (int i = 0; i < images.length; i++) {
            String url = images[i];
            ImageView imageView = new ImageView(DetailActivity.this);
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            Glide.with(DetailActivity.this).load(url).into(imageView);
            //添加到集合
            imageViews.add(imageView);
        }
        MyPagerAdapter myPagerAdapter=new MyPagerAdapter(DetailActivity.this, imageViews,images);
        viewpager.setAdapter(myPagerAdapter);
        String s = dataBean.getImages().split("\\|")[0];
      //  Glide.with(DetailActivity.this).load(s).into(detail_image);
        detail_title.setText(dataBean.getTitle());
    }

    @Override
    public int getPid() {
        return pid;
    }

    @Override
    public void addSuccess() {
        Toast.makeText(this, "添加购物车成功", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void addError() {

    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.detail_addcart:
                new GoodPresenterlmpl().addCart(new GoodsModellmpl(),DetailActivity.this);
                break;
        }
    }
    public void autoPlay() {
        myHandler.sendEmptyMessageDelayed(0,2000);
    }

    public void stopPlay() {
        myHandler.removeCallbacksAndMessages(null);
    }
    //自动轮播
    class MyHandler extends Handler {
        @Override
        public void handleMessage(Message msg) {

            viewpager.setCurrentItem(viewpager.getCurrentItem() + 1);

            myHandler.sendEmptyMessageDelayed(0, 2000);

        }
    }
    public void MyCire(){
        for (int i = 0; i < imageViews.size(); i++) {
            ImageView point = new ImageView(DetailActivity.this);
            point.setImageResource(R.drawable.point);
            LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
            layoutParams.setMargins(5, 0, 0, 0);
            point.setLayoutParams(layoutParams);
            //设置间距
            points.add(point);
            buttom.addView(point);
        }
        //默认第一个点选中
        points.get(0).setSelected(true);
    }
}
public interface IDetailView {
    void showGoodDetail(DetailBean.DataBean dataBean);
    //获取商品的pid
    int getPid();
    //添加购物车
    void addSuccess();
    void addError();
}

数据列表布局

<?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="vertical"
    tools:context="com.example.dell.classifyjiemian.view.GoodsActivity">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="商品列表"
        android:textSize="25sp"
        android:id="@+id/title"/>
    <View
        android:layout_width="match_parent"
        android:layout_height="0.75dp"
        android:background="#F00"/>
   <com.jcodecraeer.xrecyclerview.XRecyclerView
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:id="@+id/xrecycler"/>
</LinearLayout>
public class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.MyViewHolder> {
    private Context context;
    private List<GoodsBean.DataBean> list;
    private MyItemClickListener onMyItemClick;

    public MyRecyclerAdapter(Context context, List<GoodsBean.DataBean> list) {
        this.context = context;
        this.list = list;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = View.inflate(context, R.layout.item_recycler_view, null);
        return new MyViewHolder(view);
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, final int position) {
        ImageView image = holder.getImage();
        TextView price = holder.getPrice();
        TextView price2 = holder.getPrice2();
        TextView title = holder.getTitle();
        String s = list.get(position).getImages().split("\\|")[0];
        Glide.with(context).load(s).into(image);
        price.setText(list.get(position).getPrice()+"");
        price2.setText(list.get(position).getBargainPrice()+"");
        title.setText(list.get(position).getTitle());
        //给整条条目布局添加点击事件
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                onMyItemClick.onItemClick(view,list.get(position).getPid());
            }
        });
    }

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

    class MyViewHolder extends RecyclerView.ViewHolder{

        private final ImageView image;
        private final TextView price;
        private final TextView price2;
        private final TextView title;

        public MyViewHolder(View itemView) {
            super(itemView);
            image = itemView.findViewById(R.id.item_image_view);
            price = itemView.findViewById(R.id.item_price);
            price2 = itemView.findViewById(R.id.item_price2);
            title = itemView.findViewById(R.id.item_title);
        }

        public ImageView getImage() {
            return image;
        }

        public TextView getPrice() {
            return price;
        }

        public TextView getPrice2() {
            return price2;
        }

        public TextView getTitle() {
            return title;
        }
    }
    //Recyclerview的条目点击事件
    public interface MyItemClickListener{
        void onItemClick(View view,int pid);
    }
    //外部可以访问的方法
    public void setOnMyItemClick(MyItemClickListener onMyItemClick){
        this.onMyItemClick=onMyItemClick;
    }
}
public class MyPagerAdapter extends PagerAdapter {


    private Context context;
    private List<ImageView> list;
   private String[] imageUrls;

    public MyPagerAdapter(Context context, List<ImageView> list, String[] imageUrls) {
        this.context = context;
        this.list = list;
        this.imageUrls = imageUrls;
    }

    @Override
    public int getCount() {
        return Integer.MAX_VALUE;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return object==view;
    }

    @Override
    public Object instantiateItem(final ViewGroup container, int position) {
        position = position %list.size();
        final ImageView imageView = list.get(position);
        imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(context,DetailPicActivity.class);
                intent.putExtra("urls",imageUrls);
                context.startActivity(intent);
            }
        });
        container.addView(imageView);
        return imageView;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
       // super.destroyItem(container, position, object);
        container.removeView((View) object);
    }



}
public class MyPhotoAdapter extends PagerAdapter {
    private Context context;
    private List<PhotoView> list;

    public MyPhotoAdapter(Context context, List<PhotoView> list) {
        this.context = context;
        this.list = list;
    }

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

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view==object;
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        PhotoView photoView = list.get(position);
        container.addView(photoView);
        return photoView;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
      //  super.destroyItem(container, position, object);
        container.removeView((View) object);
    }
}

详情页面布局

<?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="vertical">
    <android.support.v4.view.ViewPager
        android:layout_width="match_parent"
        android:layout_height="450dp"
        android:id="@+id/viewpager"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="30dp"
        android:orientation="horizontal"
        android:background="#ff00ff"
        android:id="@+id/buttom"></LinearLayout>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/detail_title"/>
    <Button
        android:text="加入购物车"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/detail_addcart"/>

</LinearLayout>
<?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"
    tools:context="com.example.dell.classifyjiemian.view.DetailPicActivity">
    <android.support.v4.view.ViewPager
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/detail_pic_viewpager"/>
</LinearLayout>

可以放大缩小的图片页面

public class DetailPicActivity extends AppCompatActivity {

    private String[] urls;
    private ViewPager detail_pic_viewpager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_detail_pic);
        Intent intent = getIntent();
        if (intent !=null){
            urls = intent.getStringArrayExtra("urls");
        }
        initViews();
        //显示图片
        showPics();

    }

    private void showPics() {

        List<PhotoView> list = new ArrayList<>();
        for (int i = 0; i < urls.length; i++) {
            PhotoView photoView = new PhotoView(this);
            photoView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            //设置可以双击方法
            photoView.enable();
            Glide.with(this).load(urls[i]).into(photoView);
            list.add(photoView);
        }
        MyPhotoAdapter myPhotoAdapter = new MyPhotoAdapter(this, list);
        detail_pic_viewpager.setAdapter(myPhotoAdapter);

    }

    private void initViews() {
        detail_pic_viewpager = findViewById(R.id.detail_pic_viewpager);
    }
}

地址路径

public class HttpConfig {
   public static String Classfy_Url="https://www.zhaoapi.cn/product/getCatagory";
   public static String subclassifycation_Url="https://www.zhaoapi.cn/product/getProductCatagory";
   public static String Dailtel_url = "https://www.zhaoapi.cn/product/getProductDetail";
   public static String sub_goodslist_url = "https://www.zhaoapi.cn/product/getProducts";
   public static String addcart_url="https://www.zhaoapi.cn/product/addCart";
}

请求

public class OkHttpUtils {
private MyHandler myHandler=new MyHandler();
private String mobile;
private String password;
    //单例模式
    private static OkHttpUtils okHttpUtils=null;
    private OkLoadListener okLoadListener;

    public static OkHttpUtils getInstance(){
        if (okHttpUtils==null){
            okHttpUtils=new OkHttpUtils();
        }
        return okHttpUtils;
    }
//Get请求
    public void okGet(String url){
        //创建okhttpclient
        OkHttpClient client = new OkHttpClient.Builder().addInterceptor(new MyIntercepter()).build();
        //用request请求,将URL和参数进行封装
        Request request = new Request.Builder().url(url).build();
        //call是请求队列ok里面请求队列默认是一个
        Call call = client.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Message message = myHandler.obtainMessage();
                message.what=0;
                message.obj=e.getMessage();
                myHandler.sendMessage(message);

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                Message message = myHandler.obtainMessage();
                message.what=1;
                message.obj = response.body().string();
                myHandler.sendMessage(message);
            }
        });
    }
    //post请求
    public void okPost(String url, Map<String,String> map){
        //创建okhttpclient
        OkHttpClient client = new OkHttpClient.Builder().addInterceptor(new MyIntercepter()).build();
        FormBody.Builder builder = new FormBody.Builder();
        //遍历map集合,将参数放入body即可    遍历的核心思想就是。根据键取值
        if (map!=null){
            Set<String> keys = map.keySet();
            for (String key : keys){
                String value = map.get(key);
                builder.add(key,value);
            }
        }
        FormBody body = builder.build();
        //用request请求,将URL和参数进行封装
        Request request = new Request.Builder().url(url).post(body).build();
        //call是请求队列,ok里面请求队列默认是一个
        Call call = client.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Message message = myHandler.obtainMessage();
                message.what = 1;
                message.obj = e.getMessage();
                myHandler.sendMessage(message);
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                Message message = myHandler.obtainMessage();
                message.what =0;
                message.obj = response.body().string();
                myHandler.sendMessage(message);
            }
        });
    }
    //将输入发送到主线程,处理线程问题
    class MyHandler extends Handler{
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            int w = msg.what;
            switch (w){
                case 1://失败
                    String error = (String) msg.obj;
                    //传出去
                    okLoadListener.okLoadError(error);
                break;
                case 0:
                   String json= (String) msg.obj;
                    okLoadListener.okLoadSuccess(json);
                   break;
            }
        }
    }
    public void setOkLoadListener(OkLoadListener okLoadListener){
        this.okLoadListener =okLoadListener;
    }
    //拦截器
    class MyIntercepter implements Interceptor{

        @Override
        public Response intercept(Chain chain) throws IOException {


            //获取请求
            Request request = chain.request();
            String method = request.method();


            //判断如果是formBody
            if (method.equals("GET")){
                HttpUrl url = request.url();
                String newUrl = url.toString() + "?mobile=" + mobile + "&password=" + password;
                Request request1 = request.newBuilder().url(newUrl).build();
                Response proceed = chain.proceed(request1);
                return proceed;
            }else if (method.equals("POST")){
                //创建新的body,将原来的参数,放入新的body里面,然后再讲公共参数,添加到新的body里面
                FormBody.Builder newBuilder = new FormBody.Builder();
                RequestBody body = request.body();
                if (body instanceof FormBody){
                    for (int i = 0; i <((FormBody) body).size() ; i++) {
                        String name = ((FormBody) body).name(i);
                        String value = ((FormBody) body).value(i);
                        //添加
                        newBuilder.add(name,value);
                    }
                    FormBody newBody = newBuilder.add("source", "android").build();
                  //创建新的请求
                    Request request1 = request.newBuilder().post(newBody).build();
                    //让request去重新请求,proceed所有http请求的核心
                    Response proceed = chain.proceed(request1);
                    Log.e("AAA",request1.url().toString());

                    return proceed;
                }
            }
            return null;
        }
    }
    //上传头像
    public void upLoadImage(String upload_url, File file) {
        //创建OKHttpClient
        OkHttpClient okHttpClient = new OkHttpClient();
        //创建MultiPartBody
        MultipartBody.Builder builder = new MultipartBody.Builder().setType(MultipartBody.FORM);
        //设置参数
        MediaType mediaType = MediaType.parse("image/png");
        builder.addFormDataPart("file", file.getName(), RequestBody.create(mediaType, file));
        //添加其他参数
        builder.addFormDataPart("uid", "71");

        MultipartBody body = builder.build();
        //创建请求队列
        Request request = new Request.Builder().url(upload_url).post(body).build();
        Call newCall = okHttpClient.newCall(request);
        newCall.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
              //  Log.d(TAG, "onFailure() returned: " + "shibai---" + e.getMessage());
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
              //  Log.d(TAG, "onResponse() returned: " + response.body().string());
            }
        });
    }

}

ok的网络监听

public interface OkLoadListener {
    void okLoadSuccess(String json);

    void okLoadError(String error);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在信号处理领域,DOA(Direction of Arrival)估计是一项关键技术,主要用于确定多个信号源到达接收阵列的方向。本文将详细探讨三种ESPRIT(Estimation of Signal Parameters via Rotational Invariance Techniques)算法在DOA估计中的实现,以及它们在MATLAB环境中的具体应用。 ESPRIT算法是由Paul Kailath等人于1986年提出的,其核心思想是利用阵列数据的旋转不变性来估计信号源的角度。这种算法相比传统的 MUSIC(Multiple Signal Classification)算法具有较低的计算复杂度,且无需进行特征值分解,因此在实际应用中颇具优势。 1. 普通ESPRIT算法 普通ESPRIT算法分为两个主要步骤:构造等效旋转不变系统和估计角度。通过空间平移(如延时)构建两个子阵列,使得它们之间的关系具有旋转不变性。然后,通过对子阵列数据进行最小二乘拟合,可以得到信号源的角频率估计,进一步转换为DOA估计。 2. 常规ESPRIT算法实现 在描述中提到的`common_esprit_method1.m`和`common_esprit_method2.m`是两种不同的普通ESPRIT算法实现。它们可能在实现细节上略有差异,比如选择子阵列的方式、参数估计的策略等。MATLAB代码通常会包含预处理步骤(如数据归一化)、子阵列构造、旋转不变性矩阵的建立、最小二乘估计等部分。通过运行这两个文件,可以比较它们在估计精度和计算效率上的异同。 3. TLS_ESPRIT算法 TLS(Total Least Squares)ESPRIT是对普通ESPRIT的优化,它考虑了数据噪声的影响,提高了估计的稳健性。在TLS_ESPRIT算法中,不假设数据噪声是高斯白噪声,而是采用总最小二乘准则来拟合数据。这使得算法在噪声环境下表现更优。`TLS_esprit.m`文件应该包含了TLS_ESPRIT算法的完整实现,包括TLS估计的步骤和旋转不变性矩阵的改进处理。 在实际应用中,选择合适的ESPRIT变体取决于系统条件,例如噪声水平、信号质量以及计算资源。通过MATLAB实现,研究者和工程师可以方便地比较不同算法的效果,并根据需要进行调整和优化。同时,这些代码也为教学和学习DOA估计提供了一个直观的平台,有助于深入理解ESPRIT算法的工作原理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值