接口
public class UserApi {
//接口
public static final String User_API = "tools/mockapi/6523/restaurant-list";
}
创建数据层
将数据封装一下
public interface UserService {
//封装UserBean
@GET
Observable<UserBean> getUser(@Url String url);
}
创建RequestCallBack
public interface RequestCallBack {
void success(Object result);
void fail(Object msg);
}
创建Retrofit工具类,并创建方法
package jiaoyibo.bawei.com.zhanshi02.net;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import com.jakewharton.retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import java.util.concurrent.TimeUnit;
import okhttp3.OkHttpClient;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
/**
* <p>文件描述:<p>
* <p>作者:JYB<p>
* <p>创建时间:2019/3/17<p>
* <p>更改时间:2019/3/17<p>
* <p>版本号:1<p>
*/
public class RetrofitUtils {
private static RetrofitUtils mInstance;
private final Retrofit retrofit;
//单利
public static RetrofitUtils getmInstance(){
if(mInstance==null){
synchronized (RetrofitUtils.class){
if(mInstance==null){
mInstance=new RetrofitUtils();
}
}
}
return mInstance;
}
//日志拦截器
private RetrofitUtils(){
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.addInterceptor(loggingInterceptor)
//网络拦截器
.addNetworkInterceptor(loggingInterceptor)
.writeTimeout(5,TimeUnit.SECONDS)
.connectTimeout(5,TimeUnit.SECONDS)
.readTimeout(5,TimeUnit.SECONDS)
.build();
retrofit = new Retrofit.Builder()
//设置网络请求的Url地址
.baseUrl("https://www.wanandroid.com/")
//添加rxjava转换器
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
//设置数据解析器
.addConverterFactory(GsonConverterFactory.create())
//传入上面创建的OKHttpClient
.client(okHttpClient)
.build();
}
// 创建网络请求接口的实例
public <T> T create(Class<T> tClass){
return retrofit.create(tClass);
}
}
创建契约类
public interface LoadContract {
public abstract class IUserPresenter{
public abstract void getCart(HashMap<String,String> map);
}
interface IUserModel{
void getCart(HashMap<String,String>map, RequestCallBack requestCallBack);
}
interface IUserView{
void success(Object result);
void fail(Object msg);
}
}
创建Model层
package jiaoyibo.bawei.com.zhanshi02.model;
import java.util.HashMap;
import java.util.List;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers;
import jiaoyibo.bawei.com.zhanshi02.api.UserApi;
import jiaoyibo.bawei.com.zhanshi02.bean.UserBean;
import jiaoyibo.bawei.com.zhanshi02.bean.UserService;
import jiaoyibo.bawei.com.zhanshi02.contract.LoadContract;
import jiaoyibo.bawei.com.zhanshi02.net.RequestCallBack;
import jiaoyibo.bawei.com.zhanshi02.net.RetrofitUtils;
/**
* <p>文件描述:<p>
* <p>作者:JYB<p>
* <p>创建时间:2019/3/17<p>
* <p>更改时间:2019/3/17<p>
* <p>版本号:1<p>
*/
public class LoadModel implements LoadContract.IUserModel {
@Override
public void getCart(HashMap<String, String> map, final RequestCallBack requestCallBack) {
RetrofitUtils.getmInstance().create(UserService.class)
.getUser(UserApi.User_API)
//设置在主线程接受事件
.observeOn(AndroidSchedulers.mainThread())
//在子线程执行联网操作
.subscribeOn(Schedulers.io())
.subscribe(new Consumer<UserBean>() {
@Override
public void accept(UserBean userBean) throws Exception {
List<UserBean.DataBean> data = userBean.getData();
if (data != null) {
requestCallBack.success(userBean);
} else {
requestCallBack.fail(userBean);
}
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
System.out.print(throwable);
}
});
}
}
创建Presenter层
package jiaoyibo.bawei.com.zhanshi02.presenter;
import java.util.HashMap;
import jiaoyibo.bawei.com.zhanshi02.contract.LoadContract;
import jiaoyibo.bawei.com.zhanshi02.model.LoadModel;
import jiaoyibo.bawei.com.zhanshi02.net.RequestCallBack;
/**
* <p>文件描述:<p>
* <p>作者:JYB<p>
* <p>创建时间:2019/3/17<p>
* <p>更改时间:2019/3/17<p>
* <p>版本号:1<p>
*/
public class LoadPresenter extends LoadContract.IUserPresenter {
private LoadContract.IUserView iUserView;
private LoadModel loadModel;
public LoadPresenter(LoadContract.IUserView iUserView) {
this.iUserView = iUserView;
loadModel = new LoadModel();
}
@Override
public void getCart(HashMap<String, String> map) {
loadModel.getCart(map, new RequestCallBack() {
@Override
public void success(Object result) {
iUserView.success(result);
}
@Override
public void fail(Object msg) {
iUserView.fail(msg);
}
});
}
}
创建App,在清单文件中注册
package jiaoyibo.bawei.com.zhanshi02.app;
import android.app.Application;
import com.facebook.cache.disk.DiskCacheConfig;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.imagepipeline.core.ImagePipelineConfig;
/**
* <p>文件描述:<p>
* <p>作者:JYB<p>
* <p>创建时间:2019/3/17<p>
* <p>更改时间:2019/3/17<p>
* <p>版本号:1<p>
*/
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
Fresco.initialize(this,ImagePipelineConfig.newBuilder(App.this)
.setMainDiskCacheConfig(
DiskCacheConfig.newBuilder(this)
.setBaseDirectoryPath(new File(Environment.getExternalStorageDirectory().getAbsolutePath()))
.setMaxCacheSize(10*1024*1024)
.build()
)
.build());
}
}
创建适配器进行展示
package jiaoyibo.bawei.com.molizhoukao01.adapter;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.facebook.drawee.view.SimpleDraweeView;
import com.jcodecraeer.xrecyclerview.XRecyclerView;
import java.util.ArrayList;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
import jiaoyibo.bawei.com.molizhoukao01.R;
import jiaoyibo.bawei.com.molizhoukao01.bean.ResultBean;
import jiaoyibo.bawei.com.molizhoukao01.net.RetrofitUtils;
/**
* <p>文件描述:<p>
* <p>作者:JYB<p>
* <p>创建时间:2019/4/14<p>
* <p>更改时间:2019/4/14<p>
* <p>版本号:1<p>
*/
public class UserAdapter extends XRecyclerView.Adapter<UserAdapter.ViewHolder> {
private Context context;
private List<ResultBean> list;
public UserAdapter(Context context) {
this.context = context;
list = new ArrayList<>();
}
public void setList(List<ResultBean> list) {
this.list = list;
notifyDataSetChanged();
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(context).inflate(R.layout.item1, viewGroup, false);
ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, final int i) {
viewHolder.title.setText(list.get(i).getCommodityName());
viewHolder.price.setText(list.get(i).getPrice()+"");
viewHolder.simple.setImageURI(list.get(i).getMasterPic());
//条目点击事件
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
RetrofitUtils.getmInstance().add(list.get(i));
}
});
}
@Override
public int getItemCount() {
return list.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.simple)
SimpleDraweeView simple;
@BindView(R.id.title)
TextView title;
@BindView(R.id.price)
TextView price;
public ViewHolder(@NonNull View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
}
主页面的操作
package jiaoyibo.bawei.com.zhanshi02;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import com.jcodecraeer.xrecyclerview.XRecyclerView;
import java.util.HashMap;
import java.util.List;
import jiaoyibo.bawei.com.zhanshi02.adapter.UserAdapter;
import jiaoyibo.bawei.com.zhanshi02.bean.UserBean;
import jiaoyibo.bawei.com.zhanshi02.contract.LoadContract;
import jiaoyibo.bawei.com.zhanshi02.presenter.LoadPresenter;
public class MainActivity extends AppCompatActivity implements LoadContract.IUserView {
private LoadPresenter loadPresenter;
private UserAdapter userAdapter;
private XRecyclerView rev;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取控件
rev = findViewById(R.id.rev);
//设置布局样式
rev.setLayoutManager(new LinearLayoutManager(this));
//调用p层
loadPresenter = new LoadPresenter(this);
//调用p层方法
loadPresenter.getCart(new HashMap<String, String>());
}
@Override
public void success(Object result) {
//拿到数据
UserBean userBean = (UserBean) result;
//获取适配器
userAdapter = new UserAdapter(this);
//设置适配器
rev.setAdapter(userAdapter);
//拿到集合
List<UserBean.DataBean.SpusBean> spus = userBean.getData().get(0).getSpus();
//取出数据
userAdapter.setList(spus);
}
@Override
public void fail(Object msg) {
}
}
主布局
<?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=".MainActivity">
<com.jcodecraeer.xrecyclerview.XRecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/rev"
></com.jcodecraeer.xrecyclerview.XRecyclerView>
</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="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical">
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/img"
android:layout_width="100dp"
android:layout_height="100dp"
android:src="@mipmap/ic_launcher"
app:roundAsCircle="true"
app:roundedCornerRadius="5dp"
app:roundBottomLeft="true"
app:roundBottomRight="true"
app:roundTopLeft="true"
app:roundTopRight="true"/>
<LinearLayout
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
>
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="title"/>
<TextView
android:id="@+id/price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="price"
android:textColor="#FF00"
android:layout_marginTop="20dp"/>
</LinearLayout>
</LinearLayout>