OkHttpUtils
public class OkHttpUtils {
private Handler handler=new Handler();
private static OkHttpUtils mInstance;
private OkHttpClient okHttpClient;
//私有构造
private OkHttpUtils(){
//日志拦截
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
okHttpClient = new OkHttpClient.Builder()
//日志拦截
.addInterceptor(interceptor)
//读
.readTimeout(5,TimeUnit.SECONDS)
//写
.writeTimeout(5,TimeUnit.SECONDS)
//连接超时
.connectTimeout(5,TimeUnit.SECONDS)
.build();
}
//单例模式
public static OkHttpUtils getmInstance() {
if (mInstance==null){
synchronized (OkHttpUtils.class){
if (mInstance==null){
mInstance=new OkHttpUtils();
}
}
}
return mInstance;
}
//post请求
public void doPost(HashMap<String,String> params,final OkHttpCallback okHttpCallback){
//请求方法体
FormBody.Builder formbody = new FormBody.Builder();
for (Map.Entry<String,String> p:params.entrySet()){
formbody.add(p.getKey(),p.getValue());
}
final RequestBody requestBody = formbody.build();
Request request = new Request.Builder()
.url(ShowApi.SHOW_UEL)
.post(requestBody)
.build();
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
if (okHttpCallback!=null){
handler.post(new Runnable() {
@Override
public void run() {
okHttpCallback.failure("网络异常了哟!");
}
});
}
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (requestBody!=null){
if (response.code()==200){
final String resulr = response.body().string();
handler.post(new Runnable() {
@Override
public void run() {
okHttpCallback.success(resulr);
}
});
}
}
}
});
}
}
OkHttpCallback接口
public interface OkHttpCallback {
void success(String result);
void failure(String msg);
}
Contract契约类
public interface CartContract {
public abstract class CartPresenter{
public abstract void getCart(HashMap<String,String> params);
}
interface ICartModel{
void getCart(HashMap<String,String> params, ICartModelCallback iCartModelCallback);
}
interface ICartView{
void success(List<CartBean.Cart> list);
void failure(String msg);
}
}
CartModel
public class CartModel implements CartContract.ICartModel {
private Handler handler=new Handler();
@Override
public void getCart(HashMap<String, String> params, final ICartModelCallback callback) {
OkHttpUtils.getmInstance().doPost(params, new OkHttpCallback() {
//成功
@Override
public void success(final String result) {
handler.post(new Runnable() {
@Override
public void run() {
callback.success(result);
}
});
}
//失败
@Override
public void failure(final String msg) {
handler.post(new Runnable() {
@Override
public void run() {
callback.failure(msg);
}
});
}
});
}
}
ICartModelCallback接口
public interface ICartModelCallback {
void success(String result);
void failure(String msg);
}
CartPresenter
public class CartPresenter extends CartContract.CartPresenter{
private CartModel cartModel;
private CartContract.ICartView icartView;
public CartPresenter(CartContract.ICartView iCartView) {
cartModel=new CartModel();
this.icartView =iCartView ;
}
@Override
public void getCart(HashMap<String, String> params) {
cartModel.getCart(params, new ICartModelCallback() {
//成功回调
@Override
public void success(String result) {
if(icartView!=null){
CartBean cartBean = new Gson().fromJson(result, CartBean.class);
icartView.success(cartBean.data);
}
}
//失败回调
@Override
public void failure(String msg) {
if (icartView!=null){
icartView.failure(msg);
}
}
});
}
}
CartAdapter
public class CartAdapter extends XRecyclerView.Adapter<CartAdapter.MyVh> {
private Context context;
private List<CartBean.Cart> list;
public CartAdapter(Context context){
this.context = context;
this.list = new ArrayList<>();
}
public void setData(List<CartBean.Cart> list) {
this.list= list;
notifyDataSetChanged();
}
@NonNull
@Override
public CartAdapter.MyVh onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view=LayoutInflater.from(context).inflate(R.layout.show_item_layout,viewGroup,false);
return new MyVh(view);
}
@Override
public void onBindViewHolder(@NonNull CartAdapter.MyVh myVh, final int i) {
final CartBean.Cart cart = list.get(i);
String[] img = cart.images.split("\\|");
if (img!=null&&img.length>0){
Glide.with(context).load(img[0]).into(myVh.image);
}
myVh.title.setText(cart.title);
myVh.price.setText(cart.price+"");
}
@Override
public int getItemCount() {
//三目
return list==null?0:list.size();
}
public class MyVh extends RecyclerView.ViewHolder {
private ImageView image;
private TextView title;
private TextView price;
private Button jia;
private ImageView sdd;
public MyVh(@NonNull View itemView) {
super(itemView);
image = itemView.findViewById(R.id.image);
title = itemView.findViewById(R.id.title);
price = itemView.findViewById(R.id.price);
jia = itemView.findViewById(R.id.jia);
sdd = itemView.findViewById(R.id.sdd);
}
}
}
FragmentShow
public class FragmentThree extends Fragment implements CartContract.ICartView {
private ImageView back;
private EditText edSs;
private ImageView sd;
private XRecyclerView rv;
private CartAdapter cartAdapter;
private List<CartBean.Cart> list;
private CartPresenter cartPresenter;
private HashMap<String, String> map;
private String page=“1”;
private RelativeLayout rel;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragmentthree, container, false);
return view;
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
//获取资源id
initView(view);
//数据
initData();
}
//数据
private void initData() {
cartPresenter = new CartPresenter(this);
}
@Override
public void success(List<CartBean.Cart> list) {
cartAdapter.setData(list);
}
@Override
public void failure(String msg) {
}
private void initView(View view) {
back = (ImageView) view.findViewById(R.id.back);
edSs = (EditText) view.findViewById(R.id.ed_ss);
sd = (ImageView) view.findViewById(R.id.sd);
rv = (XRecyclerView) view.findViewById(R.id.rv);
rel = view.findViewById(R.id.rel);
cartAdapter = new CartAdapter(getActivity());
rv.setAdapter(cartAdapter);
rv.setLayoutManager(new LinearLayoutManager(getActivity(),OrientationHelper.VERTICAL,false));
sd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String ed = edSs.getText().toString();
map = new HashMap<>();
map.put("keywords","手机");
map.put("page",page);
cartPresenter.getCart(map);
rel.setVisibility(View.INVISIBLE);
}
});
}
}
API
public class ShowApi {
public static final String SHOW_UEL=“http://www.zhaoapi.cn/product/searchProducts”;
}
CartBean
public class CartBean {
public String msg;//查询成功
public String code;
public List data;
public class Cart{
public String title;
public String pid;
public String pscid;
public String price;
public String images;
}
}
FragmentShow主布局
<?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">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<ImageView
android:id="@+id/back"
android:layout_width="40dp"
android:layout_height="30dp"
android:src="@drawable/back"
android:layout_marginTop="10dp"
android:layout_marginLeft="10dp"/>
<EditText
android:id="@+id/ed_ss"
android:layout_width="260dp"
android:layout_height="30dp"
android:background="@drawable/shape"
android:text="搜索"
android:layout_marginTop="10dp"
android:layout_marginLeft="30dp"
android:paddingLeft="15dp"/>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/sd"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_alignParentRight="true"
android:src="@drawable/caii"
android:layout_marginTop="10dp"
android:layout_marginRight="10dp"
/>
</RelativeLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="9"
android:orientation="vertical">
<RelativeLayout
android:id="@+id/rel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="visible">
<TextView
android:id="@+id/zuijin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="最近搜索"
android:layout_marginLeft="10dp"
android:layout_marginTop="5dp"/>
<TextView
android:id="@+id/duan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="短袖男"
android:layout_below="@+id/zuijin"
android:layout_marginLeft="10dp"
android:background="@drawable/shape"
/>
</RelativeLayout>
<com.jcodecraeer.xrecyclerview.XRecyclerView
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
</LinearLayout>
cart_item_layout 子布局
<?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">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageView
android:id="@+id/image"
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@mipmap/ic_launcher"
android:layout_marginTop="5dp"
android:layout_marginLeft="5dp"/>
<TextView
android:id="@+id/title"
android:layout_width="260dp"
android:layout_height="wrap_content"
android:text="商品标题"
android:layout_toRightOf="@+id/image"
android:layout_marginTop="5dp"
android:layout_marginLeft="5dp"
android:lines="2"
/>
<TextView
android:id="@+id/price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="¥:0.0"
android:layout_toRightOf="@+id/image"
android:layout_below="@+id/title"
android:textColor="#f00"/>
<Button
android:id="@+id/jia"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="加入购物车"
android:layout_alignParentRight="true"
android:layout_marginTop="10dp"/>
</RelativeLayout>
</LinearLayout>