mvp+listview+搜索

首先导入包

 //okhttp
    implementation 'com.survivingwithandroid:weatherlib_okhttpclient:1.6.0'
    implementation 'com.squareup.okhttp3:okhttp:3.12.0'
    //黄油刀
    implementation 'com.jakewharton:butterknife:8.7.0'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.7.0'
    //图片加载框架,glide
    implementation 'com.github.bumptech.glide:glide:3.7.0'
    implementation 'com.google.code.gson:gson:2.8.5'

清单文件

   <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

布局1

<?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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".activity.MainActivity"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <EditText
            android:id="@+id/edit_qiery"
            android:layout_weight="1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <TextView
            android:id="@+id/text01"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="20sp"
            android:onClick="dainjia"
            android:text="搜索" />


    </LinearLayout>



    <ListView
        android:id="@+id/list_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></ListView>


</LinearLayout>

listview布局

<?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"
    android:orientation="horizontal"
    >
   <ImageView
       android:id="@+id/img"
       android:layout_width="80dp"
       android:layout_height="80dp"
       android:scaleType="center"
       />
    <TextView
        android:id="@+id/title"
        android:layout_weight="1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>

API

package com.example.dell.san.api;

public class Api {
    public static final String BASE_URL="http://www.zhaoapi.cn/";
}

ProductApi

package com.example.dell.san.api;

import static com.example.dell.san.api.Api.BASE_URL;

public class Product_api {
    public final static  String PRODUCT_URL=BASE_URL+"product/searchProducts";
}

接口回调

package com.example.dell.san.callback;

import com.example.dell.san.bean.Bean;

public interface ProductCallBack {
    void failure(String s);
    void success(Bean s);
}

锲约类

package com.example.dell.san.contract;

import com.example.dell.san.bean.Bean;
import com.example.dell.san.callback.ProductCallBack;

import java.util.HashMap;

public interface PoductContract {
    //m
    public interface InDataModle{
        void getDataModle(HashMap<String,String> hashMap, ProductCallBack callBack);
    }
    //view层
    public interface InDataView{
        void ViewFilure(String s);
        void ViewSuccess(Bean s);
    }
    //presenter层
    public abstract class DataPresenter{
        public abstract void getData(HashMap<String,String> hashMap);
    }
}

modle层

package com.example.dell.san.modle;

import android.os.Handler;

import com.example.dell.san.api.Product_api;
import com.example.dell.san.bean.Bean;
import com.example.dell.san.callback.ProductCallBack;
import com.example.dell.san.contract.PoductContract;
import com.example.dell.san.utils.OkhttpUtils;

import java.util.HashMap;

public class DataModle implements PoductContract.InDataModle{
    private Handler handler=new Handler();
    @Override
    public void getDataModle(final HashMap<String, String> hashMap, final ProductCallBack callBack) {
        OkhttpUtils.getInstance().dopost(Product_api.PRODUCT_URL, hashMap, new ProductCallBack() {
            @Override
            public void failure(final String s) {
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                       callBack.failure(s);
                    }
                });
            }

            @Override
            public void success(final Bean s) {
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        callBack.success(s);
                    }
                });
            }
        });
    }
}

okHttputils

package com.example.dell.san.utils;

import android.os.Handler;

import com.example.dell.san.bean.Bean;
import com.example.dell.san.callback.ProductCallBack;
import com.google.gson.Gson;

import java.io.IOException;
import java.util.HashMap;
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.RequestBody;
import okhttp3.Response;

public class OkhttpUtils {

    private static OkhttpUtils okhttputils;
    private  OkHttpClient okHttpClient;
    private Handler handler=new Handler();

    //私有构造方法
    private OkhttpUtils(){
        okHttpClient=new OkHttpClient.Builder()
                .connectTimeout(5,TimeUnit.SECONDS)
                .writeTimeout(5,TimeUnit.SECONDS)
                .readTimeout(5,TimeUnit.SECONDS)
                .build();
    }
    //双重检验锁 创建实列  单列模式
    public static OkhttpUtils getInstance(){
        if (okhttputils==null){
            synchronized (OkhttpUtils.class){
                if (okhttputils==null){
                    okhttputils=new OkhttpUtils();
                }
            }
        }
        return okhttputils;
    }
    //用dopost方法
    public void dopost(String url,HashMap<String,String> parmes,final ProductCallBack callBack){
        FormBody.Builder builder = new FormBody.Builder();
        for (Map.Entry<String,String> map:parmes.entrySet()){
            builder.add(map.getKey(),map.getValue());
        }
        RequestBody requestBody = builder.build();
        final Request request=new Request.Builder()
                .url(url)
                .post(requestBody)
                .build();
         okHttpClient.newCall(request).enqueue(new Callback() {
             @Override
             public void onFailure(Call call, IOException e) {
                  if (callBack==null){
                      handler.post(new Runnable() {
                          @Override
                          public void run() {
                              callBack.failure("网络请求失败");
                          }
                      });
                  }
             }

             @Override
             public void onResponse(final Call call, Response response) throws IOException {
                    if (response.code()==200){
                        String result=response.body().string();
                        final Bean bean=new Gson().fromJson(result,Bean.class);
                        handler.post(new Runnable() {
                            @Override
                            public void run() {
                              callBack.success(bean);
                            }
                        });
                    }
             }
         });

    }
}

bean类

package com.example.dell.san.bean;

import java.util.List;

public class Bean {

    public String msg;
    public String code;
    public List<Product> 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<Product> getData() {
        return data;
    }

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

    public class Product{

        public String images;
        public String title;

        public String getImages() {
            return images;
        }

        public void setImages(String images) {
            this.images = images;
        }

        public String getTitle() {
            return title;
        }

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

p层

package com.example.dell.san.presenter;

import com.example.dell.san.bean.Bean;
import com.example.dell.san.callback.ProductCallBack;
import com.example.dell.san.contract.PoductContract;
import com.example.dell.san.modle.DataModle;

import java.util.HashMap;

public class Product_Presenter extends PoductContract.DataPresenter{

    private final DataModle dataModle;
    private PoductContract.InDataView inDataView;
    public Product_Presenter(PoductContract.InDataView inDataView){
        dataModle = new DataModle();
        this.inDataView=inDataView;
  }
    @Override
    public void getData(HashMap<String, String> hashMap) {
        String s=hashMap.get("keywords");
        if (s!=null){
            dataModle.getDataModle(hashMap, new ProductCallBack() {
                @Override
                public void failure(String s) {
                    inDataView.ViewFilure(s);
                }

                @Override
                public void success(Bean s) {
                    inDataView.ViewSuccess(s);
                }


            });
        }
    }
}

mainactivity

package com.example.dell.san.activity;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import com.example.dell.san.R;
import com.example.dell.san.adapter.MyBaseAdapter;
import com.example.dell.san.bean.Bean;
import com.example.dell.san.contract.PoductContract;
import com.example.dell.san.presenter.Product_Presenter;

import java.util.HashMap;

public class MainActivity extends AppCompatActivity implements PoductContract.InDataView {

    private EditText mQieryEdit;
    private ListView mViewList;
    private Product_Presenter product_presenter;
    private MyBaseAdapter adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        //点击事件

        // 实现新的借还
        initData();
        //添加适配器
       mViewList.setAdapter(adapter);
    }

    public void dainjia(View view) {
                String s=mQieryEdit.getText().toString();
                HashMap<String, String> hashMap = new HashMap<>();
                hashMap.put("keywords",s);
                product_presenter.getData(hashMap);
    }

    private void initData() {
        product_presenter=new Product_Presenter(this);
        adapter=new MyBaseAdapter(this);
    }

    private void initView() {
        mQieryEdit = (EditText) findViewById(R.id.edit_qiery);
        mViewList = (ListView) findViewById(R.id.list_view);
    }

    @Override
    public void ViewFilure(String s) {
        Toast.makeText(MainActivity.this,s,Toast.LENGTH_SHORT).show();
    }

    @Override
    public void ViewSuccess(Bean s) {
        Toast.makeText(MainActivity.this,"成功",Toast.LENGTH_SHORT).show();
        adapter.setList(s.data);
    }
}

adapter

package com.example.dell.san.adapter;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.example.dell.san.R;
import com.example.dell.san.activity.MainActivity;
import com.example.dell.san.bean.Bean;

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

public class MyBaseAdapter extends BaseAdapter {
    private Context context;
    private List<Bean.Product> list;

    public MyBaseAdapter(Context context) {
        this.context = context;
        list=new ArrayList<>();
    }

    public void setList(List<Bean.Product> list1) {
        list.clear();
        if (list1!=null){
            list.addAll(list1);
        }
       notifyDataSetChanged();
    }

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

    @Override
    public Object getItem(int position) {
        return list.get(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
         ViewHolder holder;
         if (convertView==null){
             holder=new ViewHolder();
             convertView=LayoutInflater.from(context).inflate(R.layout.activity_product,parent,false);
             holder.img=convertView.findViewById(R.id.img);
             holder.title=convertView.findViewById(R.id.title);
             convertView.setTag(holder);
         }else{
             holder= (ViewHolder) convertView.getTag();
         }
         holder.title.setText(list.get(position).getTitle());
         String imgs=list.get(position).getImages();
         String[] split=imgs.split("\\|");
         Glide.with(context).load(split[0]).into(holder.img);
        return convertView;
    }
    class ViewHolder{
        ImageView img;
        TextView title;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值