淘宝分类

本文介绍了一个基于Retrofit和RxJava实现的Android应用案例,通过MVP架构组织代码,展示了如何进行网络请求并解析返回的数据,同时利用RecyclerView进行数据展示。

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

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.0.1'
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:recyclerview-v7:25.3.1'
    compile 'com.squareup.retrofit2:retrofit:2.3.0'
    compile 'com.squareup.retrofit2:converter-gson:2.3.0'
    compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
    compile 'io.reactivex.rxjava2:rxjava:2.1.7'
    compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
    compile 'com.github.bumptech.glide:glide:4.0.0'

}

=========

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    tools:context="com.bwie.d.liqiwen1509d20171208.MainActivity">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recy_lift"
        android:layout_weight="3"
        android:layout_width="0dp"
        android:layout_height="match_parent"/>

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recy_right"
        android:layout_weight="7"
        android:layout_width="0dp"
        android:layout_height="match_parent"/>
    </LinearLayout>
======

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

    <ImageView
        android:id="@+id/iamget"
        android:layout_gravity="center"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/grid_text"
        android:layout_gravity="center"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</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">


    <TextView
        android:id="@+id/right_text"
        android:textColor="#00f"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <android.support.v7.widget.RecyclerView
        android:id="@+id/grid_recy"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
</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/tu"
        android:layout_gravity="center"
        android:layout_width="100dp"
        android:layout_height="100dp" />

    <TextView
        android:id="@+id/left_text"
        android:textColor="#f00"
        android:layout_gravity="center"
        android:textSize="26sp"
        android:text="111"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>
=====

package com.bwie.d.liqiwen1509d20171208;

import android.app.Application;

import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;

/**
 * Created by d on 2017/12/8.
 */

public class MyApplication extends Application{

    public static TIGetModel tiGetModel;

    @Override
    public void onCreate() {
        super.onCreate();

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://120.27.23.105")
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .build();

        tiGetModel = retrofit.create(TIGetModel.class);
    }
}
=============

package com.bwie.d.liqiwen1509d20171208;

import io.reactivex.Observable;
import retrofit2.http.GET;

/**
 * Created by d on 2017/12/8.
 */

public interface TIGetModel {
    @GET("/product/getCatagory")
    Observable<BeanName> doGet();
}
=====

package com.bwie.d.liqiwen1509d20171208.model;

import com.bwie.d.liqiwen1509d20171208.BeanName;
import com.bwie.d.liqiwen1509d20171208.MyApplication;

import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers;

/**
 * Created by d on 2017/12/8.
 */

public class MyModel {

    public void getData(final ModelCallBack callBack){
        MyApplication.tiGetModel.doGet()
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer<BeanName>() {
                    @Override
                    public void accept(BeanName beanName) throws Exception {
                        callBack.success(beanName);
                    }
                });
    }

    public interface ModelCallBack{
        public void success(BeanName beanName);
    }
}
====

package com.bwie.d.liqiwen1509d20171208.presenter;

import com.bwie.d.liqiwen1509d20171208.BeanName;
import com.bwie.d.liqiwen1509d20171208.model.MyModel;

/**
 * Created by d on 2017/12/8.
 */

public class MyPresenter {
    ViewCallBack callBack;
    public MyPresenter(ViewCallBack callBack){
    this.callBack = callBack;
    }

    MyModel myModel = new MyModel();
    public void getData(){
        myModel.getData(new MyModel.ModelCallBack() {
            @Override
            public void success(BeanName beanName) {
                callBack.success(beanName);
            }
        });
    }

    public interface ViewCallBack{
        public void success(BeanName beanName);
    }
}
====

package com.bwie.d.liqiwen1509d20171208;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.Toast;

import com.bwie.d.liqiwen1509d20171208.adapter.LeftAdapter;
import com.bwie.d.liqiwen1509d20171208.adapter.RightAdapter;
import com.bwie.d.liqiwen1509d20171208.okhttp.AbstractUiCallBack;
import com.bwie.d.liqiwen1509d20171208.okhttp.OkhttpUtils;
import com.bwie.d.liqiwen1509d20171208.presenter.MyPresenter;

public class MainActivity extends AppCompatActivity implements MyPresenter.ViewCallBack{

    private RecyclerView liftrecy;
    private RecyclerView right_recy;
    private MyPresenter myPresenter;

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

        liftrecy = (RecyclerView) findViewById(R.id.recy_lift);
        right_recy = (RecyclerView) findViewById(R.id.recy_right);
        myPresenter = new MyPresenter(this);
        myPresenter.getData();
    }

    @Override
    public void success(final BeanName beanName) {
        LinearLayoutManager layoutManager = new LinearLayoutManager(MainActivity.this,LinearLayoutManager.VERTICAL,false);
        LeftAdapter leftAdapter = new LeftAdapter(MainActivity.this,beanName);
        liftrecy.setAdapter(leftAdapter);
        liftrecy.setLayoutManager(layoutManager);
        leftAdapter.setClickListener(new LeftAdapter.onClickListener() {
            @Override
            public void click(View view, int position) {
                Toast.makeText(MainActivity.this,position+"",Toast.LENGTH_SHORT).show();
                int cid = beanName.getData().get(position).getCid();
                OkhttpUtils.getInstance().asy(null, "http://120.27.23.105/product/getProductCatagory?cid=" + cid, new AbstractUiCallBack<BeanValue>() {
                    @Override
                    public void success(BeanValue beanValue) {
                        LinearLayoutManager manager = new LinearLayoutManager(MainActivity.this,LinearLayoutManager.VERTICAL,false);
                        RightAdapter rightAdapter = new RightAdapter(MainActivity.this,beanValue);
                        right_recy.setLayoutManager(manager);
                        right_recy.setAdapter(rightAdapter);
                    }

                    @Override
                    public void failure(Exception e) {

                    }
                });

            }
        });

    }
}
====================

package com.bwie.d.liqiwen1509d20171208.adapter;

import android.content.Context;
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.bwie.d.liqiwen1509d20171208.BeanName;
import com.bwie.d.liqiwen1509d20171208.R;

/**
 * Created by d on 2017/12/8.
 */

public class LeftAdapter extends RecyclerView.Adapter<LeftAdapter.IviewHolder>{
    Context context;
    BeanName beanName;
    public LeftAdapter(Context context, BeanName beanName) {
        this.beanName = beanName;
        this.context = context;
    }

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

    @Override
    public void onBindViewHolder(IviewHolder holder, final int position) {
        holder.textView.setText(beanName.getData().get(position).getName());
        Glide.with(context).load(beanName.getData().get(position).getIcon()).into(holder.tu);
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(listener!=null){
                    listener.click(view,position);
                }
            }
        });
    }

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

    static class IviewHolder extends RecyclerView.ViewHolder{

        private final TextView textView;
        private final ImageView tu;

        public IviewHolder(View itemView) {
            super(itemView);
            tu= (ImageView) itemView.findViewById(R.id.tu);
            textView = (TextView) itemView.findViewById(R.id.left_text);
        }
    }
    onClickListener listener;
    public void setClickListener(onClickListener listener){
        this.listener = listener;
    }

    public interface onClickListener{
        public void click(View view,int position);
    }
}
==============

package com.bwie.d.liqiwen1509d20171208.adapter;

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

import com.bwie.d.liqiwen1509d20171208.BeanValue;
import com.bwie.d.liqiwen1509d20171208.R;

/**
 * Created by d on 2017/12/8.
 */

public class RightAdapter extends RecyclerView.Adapter<RightAdapter.IViewHolder>{
    Context context;
    BeanValue beanValue;
    public RightAdapter(Context context, BeanValue beanValue) {
        this.context = context;
        this.beanValue = beanValue;
    }

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

    @Override
    public void onBindViewHolder(IViewHolder holder, int position) {
        holder.textView.setText(beanValue.getData().get(position).getName());

        GridLayoutManager manager = new GridLayoutManager(context,3);
        GridAdapter gridAdapter = new GridAdapter(context,beanValue);
        holder.recyclerView.setLayoutManager(manager);
        holder.recyclerView.setAdapter(gridAdapter);

    }

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

    static class IViewHolder extends RecyclerView.ViewHolder{

        private final TextView textView;
        private final RecyclerView recyclerView;

        public IViewHolder(View itemView) {
            super(itemView);

            textView = (TextView) itemView.findViewById(R.id.right_text);
            recyclerView = (RecyclerView) itemView.findViewById(R.id.grid_recy);
        }
    }
}
========

package com.bwie.d.liqiwen1509d20171208.adapter;

import android.content.Context;
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.bwie.d.liqiwen1509d20171208.BeanValue;
import com.bwie.d.liqiwen1509d20171208.R;

/**
 * Created by d on 2017/12/8.
 */

public class GridAdapter extends RecyclerView.Adapter<GridAdapter.IViewHolder>{
    Context context;
    BeanValue beanValue;
    public GridAdapter(Context context, BeanValue beanValue) {
        this.context = context;
        this.beanValue = beanValue;
    }

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

    @Override
    public void onBindViewHolder(IViewHolder holder, int position) {
        holder.textView.setText(beanValue.getData().get(position).getList().get(position).getName());
        Glide.with(context).load(beanValue.getData().get(position).getList().get(position).getIcon()).into(holder.iamget);
}

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

    public static class IViewHolder extends RecyclerView.ViewHolder{

        private final TextView textView;
        private final ImageView iamget;

        public IViewHolder(View itemView) {
            super(itemView);
            iamget=(ImageView)itemView.findViewById(R.id.iamget);
            textView = (TextView) itemView.findViewById(R.id.grid_text);
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值