自定义View搜索(OkHttp实现)

MVP
View层

public interface SearchViewIm {
    public abstract class IPresenter{
        public abstract void Right(HashMap<String,String> map);
    }

    public interface IModel{
        public abstract void Right(HashMap<String,String>map,SearchModel.ModelCallBack callBack);
    }

    public interface IView{
        public void RightSuccess(String result);
        public void RightFail(String message);
    }
}

Model层

public class SearchModel implements SearchViewIm.IModel {

    private String value;
    private String key;

    @Override
    public void Right(HashMap<String, String> map, final SearchModel.ModelCallBack callBack) {
        for (Map.Entry<String,String>p:map.entrySet()){
            value = p.getValue();
            key = p.getKey();
        }
        String s = SearchApi.RightApi + value + "";
        OkHttpUtils.getUtils().doGet(s, new OkHttpCallBack() {
            @Override
            public void Success(String result) {
                callBack.Success(result);
            }

            @Override
            public void Fail(String message) {
                callBack.Fail(message);
            }
        });
    }

    public interface ModelCallBack {
        public void Success(String result);
        public void Fail(String message);
    }
}

Presenter层

public class SearchPresenter extends SearchViewIm.IPresenter {

    private SearchViewIm.IView iView;
    private SearchModel model;

    public SearchPresenter(SearchViewIm.IView iView) {
        this.iView = iView;
        model = new SearchModel();
    }

    @Override
    public void Right(HashMap<String, String> map) {
        model.Right(map, new SearchModel.ModelCallBack() {
            @Override
            public void Success(String result) {
                iView.RightSuccess(result);
            }

            @Override
            public void Fail(String message) {
                iView.RightFail(message);
            }
        });
    }
}

工具类接口

public interface OkHttpCallBack {
    public void Success(String result);
    public void Fail(String message);
}

工具类

public class OkHttpUtils {

    private OkHttpClient client;
    private static OkHttpUtils utils;
    private Handler handler = new Handler();
    public static OkHttpUtils getUtils(){
        if (utils == null){
            synchronized (OkHttpUtils.class){
                if (utils == null){
                    utils = new OkHttpUtils();
                }
            }
        }
        return utils;
    }

    private OkHttpUtils(){
        HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
        interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
        client = new OkHttpClient.Builder()
                .addInterceptor(interceptor)
                .writeTimeout(5,TimeUnit.SECONDS)
                .connectTimeout(5,TimeUnit.SECONDS)
                .readTimeout(5,TimeUnit.SECONDS)
                .build();
    }

    public void doGet(String Url, final OkHttpCallBack callBack){
        Request request = new Request.Builder().url(Url).get().build();
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        callBack.Fail("网络连接失败");
                    }
                });
            }

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

    public void doPost(String Url, HashMap<String,String>map, final OkHttpCallBack callBack){
        FormBody.Builder builder = new FormBody.Builder();
        for (Map.Entry<String,String>p:map.entrySet()){
            builder.add(p.getKey(),p.getValue());
        }
        FormBody body = builder.build();
        Request request = new Request.Builder().url(Url).post(body).build();
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                callBack.Fail("网络连接失败");
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (callBack != null){
                    if (response.code() == 200){
                        final String string = response.body().string();
                        handler.post(new Runnable() {
                            @Override
                            public void run() {
                                callBack.Success(string);
                            }
                        });
                    }
                }
            }
        });
    }
}

主页面

public class MainActivity extends AppCompatActivity implements SearchViewIm.IView {

    private Search_view mainSearchView;
    private XRecyclerView mainRecycler;
    private Button button;
    private EditText editText;
    private SearchAdapter adapter;
    private SearchPresenter presenter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = findViewById(R.id.search_view_but);
        editText = findViewById(R.id.search_view_edit);
        mainSearchView = findViewById(R.id.main_search_view);
        mainRecycler = findViewById(R.id.main_recycler);
        mainRecycler.setLayoutManager(new GridLayoutManager(this,2));
        HashMap<String,String>map = new HashMap<>();
        map.put("keyword","板鞋");
        presenter = new SearchPresenter(this);
        presenter.Right(map);
        button.setOnClickListener(new View.OnClickListener() {

            private String trim;

            @Override
            public void onClick(View v) {
                aa();
            }

            private void aa() {
                trim = editText.getText().toString().trim();
                if (trim.equals("")){
                    Toast.makeText(MainActivity.this,"关键字不能为空",Toast.LENGTH_SHORT).show();
                    return;
                }
                HashMap<String,String>map = new HashMap<>();
                map.put("name",trim);
                presenter.Right(map);
            }
        });
    }

    @Override
    public void RightSuccess(String result) {
        SearchBean bean = new Gson().fromJson(result, SearchBean.class);
        adapter = new SearchAdapter(this);
        adapter.setList(bean.getResult());
        mainRecycler.setAdapter(adapter);
    }

    @Override
    public void RightFail(String message) {

    }
}

猜你喜欢

转载自blog.csdn.net/weixin_44300712/article/details/90173575