防京东搜索页面+跳转详情页

IView

public interface IView {
    Context context();
}

MainView

public interface MainView extends IView {
    void ShowSuccess(GoodsBean goodsBean);
    void ShowError(String error);
}

HttpUtils

public class OkHttpUtils {
    public static OkHttpUtils oKhttpUtils;
    private final OkHttpClient okHttpClient;
    private final Handler myhandler;
    
    private OkHttpUtils() {
        //主线程Handler
        myhandler = new Handler(Looper.getMainLooper());
        okHttpClient = new OkHttpClient.Builder()
                .readTimeout(5000, TimeUnit.MILLISECONDS)
                .writeTimeout(5000, TimeUnit.MILLISECONDS)
                .connectTimeout(5000, TimeUnit.MILLISECONDS)
                //  .addInterceptor(httpLoggingInterceptor)
                .build();
    }


    public static OkHttpUtils getoKhttpUtils() {
        if (oKhttpUtils == null) {
            synchronized (OkHttpUtils.class) {
                if (oKhttpUtils == null) {
                    return oKhttpUtils = new OkHttpUtils();
                }
            }
        }
        return oKhttpUtils;
    }


    //异步get
    public void doGet(String url, final IOKhttpUtilsCallback ioKhttpUtilsCallback) {
        Request request = new Request.Builder()
                .get()
                .url(url)
                .build();
        Call call = okHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, final IOException e) {
                if (ioKhttpUtilsCallback != null) {
                    //切换到主线程
                    myhandler.post(new Runnable() {
                        @Override
                        public void run() {
                            ioKhttpUtilsCallback.onFailure(e.getMessage());
                        }
                    });
                }
            }


            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (response != null && response.isSuccessful()) {
                    final String json = response.body().string();
                    if (ioKhttpUtilsCallback != null) {
                        //切换到主线程
                        myhandler.post(new Runnable() {
                            @Override
                            public void run() {
                                ioKhttpUtilsCallback.onResponse(json);
                            }
                        });
                    }


                } else {
                    if (ioKhttpUtilsCallback != null) {
                        //切换到主线程
                        myhandler.post(new Runnable() {
                            @Override
                            public void run() {
                                ioKhttpUtilsCallback.onFailure("网络异常");
                            }
                        });
                    }
                }
            }
        });


    }


    //异步post
    public void doPost(String url, Map<String, String> map, final IOKhttpUtilsCallback ioKhttpUtilsCallback) {
        FormBody.Builder builder = new FormBody.Builder();
        for (Map.Entry<String, String> entry : map.entrySet()) {
            builder.add(entry.getKey(), entry.getValue());
        }
        FormBody formBody = builder.build();
        Request request = new Request.Builder()
                .post(formBody)
                .url(url)
                .build();
        Call call = okHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, final IOException e) {
                if (ioKhttpUtilsCallback != null) {
                    //切换到主线程
                    myhandler.post(new Runnable() {
                        @Override
                        public void run() {
                            ioKhttpUtilsCallback.onFailure(e.getMessage());
                        }
                    });
                }
            }


            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (response != null && response.isSuccessful()) {
                    final String json = response.body().string();
                    if (ioKhttpUtilsCallback != null) {
                        //切换到主线程
                        myhandler.post(new Runnable() {
                            @Override
                            public void run() {
                                ioKhttpUtilsCallback.onResponse(json);
                            }
                        });
                    }


                } else {
                    if (ioKhttpUtilsCallback != null) {
                        //切换到主线程
                        myhandler.post(new Runnable() {
                            @Override
                            public void run() {
                                ioKhttpUtilsCallback.onFailure("网络异常");
                            }
                        });
                    }
                }
            }
        });
    }


    //接口回调
    public interface IOKhttpUtilsCallback {
        void onFailure(String error);

        void onResponse(String json);
    }
}

MainModel

public class MainModel {
    public void showGoods(int page,final MainmodelCallback mainmodelCallback,String name){
        OkHttpUtils okHttpUtils = OkHttpUtils.getoKhttpUtils();
        String url = "http://www.zhaoapi.cn/product/searchProducts?keywords="+name+"&page="+page;
        okHttpUtils.doGet(url, new OkHttpUtils.IOKhttpUtilsCallback() {
            @Override
            public void onFailure(String error) {
                if(mainmodelCallback!=null){
                    mainmodelCallback.getFaid(error);
                }
            }

            @Override
            public void onResponse(String json) {
                GoodsBean goodsBean = new Gson().fromJson(json, GoodsBean.class);
                Log.i("aaa",goodsBean.getData().toString());
                if(goodsBean.getCode().equals("0")){
                    if(mainmodelCallback!=null){
                        mainmodelCallback.getSuccess(goodsBean);
                    }
                }else{
                    if(mainmodelCallback!=null){
                        mainmodelCallback.getFaid("请求失败");
                    }
                }

            }
        });

    }
    public interface MainmodelCallback{
        void getSuccess(GoodsBean goodsBean);
        void getFaid(String error);
    }

}

BasePresenter

public abstract class BasePresenter<V extends IView> {
    protected V view;
    public BasePresenter(V view){
        this.view=view;
        initModel();
    }

    protected abstract void initModel();
    void onDestroy(){
        view=null;
    }
}

MainPresenter

public abstract class BasePresenter<V extends IView> {
    protected V view;
    public BasePresenter(V view){
        this.view=view;
        initModel();
    }

    protected abstract void initModel();
    void onDestroy(){
        view=null;
    }
}

BaseActivity

public abstract class BaseActivity<P extends BasePresenter> extends AppCompatActivity {
    protected P presenter;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(provideLayoutId());
        initViews();
        initListener();
        presenter=providePresenter();
        initDatas();
    }

    protected abstract P providePresenter();

    protected abstract int provideLayoutId();

    protected abstract void initDatas();

    protected abstract void initListener();

    protected abstract void initViews();

    @Override
    protected void onDestroy() {
        presenter.onDestroy();
        super.onDestroy();
    }
}

Activity

public class MainActivity extends AppCompatActivity implements View.OnClickListener, MainView {
    String url = "http://www.zhaoapi.cn/product/searchProducts?keywords=笔记本&page=";

    private ImageView mMainImg;
    /**
     * 综合
     */
    private TextView mMainTextZh;
    /**
     * 销量
     */
    private TextView mMainTextXl;
    /**
     * 价格
     */
    private TextView mMainTextJg;

    private XRecyclerView mMainRecycler;
    private int page = 1;
    private int type = 1;
    private MainAdapter adapter;
    private MainPresenter presenter;
    private ImageView imageView;
    private EditText editText;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化控件
        initView();
        //布局
        initData();
//        String urls = url+page+"&type="+type;
        presenter.showGoods( page, "手机");
        //上拉加载下拉刷新
        initRefresh();


//        //价格监听
//        mMainTextJg.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View view) {
//                page = 1;
//                type = 2;
//                url = "http://www.zhaoapi.cn/product/searchProducts?keywords=笔记本&page=";
//                String s = editText.getText().toString();
//                presenter.showGoods( page, s);
//
//            }
//        });
        imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String s = editText.getText().toString();
                presenter.showGoods( page, s);

            }
        });
    }

    private void initRefresh() {
        mMainRecycler.setLoadingListener(new XRecyclerView.LoadingListener() {
            @Override
            public void onRefresh() {
                //更新UI
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        mMainRecycler.refreshComplete();
                        Toast.makeText(MainActivity.this, "刷新完成", Toast.LENGTH_SHORT).show();
                    }
                }, 2000);
            }

            @Override
            public void onLoadMore() {
                //更新UI
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        mMainRecycler.loadMoreComplete();
                        Toast.makeText(MainActivity.this, "加载完成", Toast.LENGTH_SHORT).show();
                    }
                }, 2000);
            }
        });
    }

    private void initData() {
        presenter = new MainPresenter(this);
        mMainImg.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (type == 1) {
                    mMainImg.setImageResource(R.drawable.menu2);
                    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(MainActivity.this);
                    linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
                    mMainRecycler.setLayoutManager(linearLayoutManager);
                    adapter.notifyDataSetChanged();
                    type = 2;
                } else {
                    mMainImg.setImageResource(R.drawable.menu1);
                    GridLayoutManager gridLayoutManager = new GridLayoutManager(MainActivity.this, 2);
                    mMainRecycler.setLayoutManager(gridLayoutManager);
                    adapter.notifyDataSetChanged();
                    type = 1;
                }
            }
        });
    }

    private void initView() {
        mMainImg = findViewById(R.id.main_img);
        mMainImg.setOnClickListener(this);
        mMainTextZh = findViewById(R.id.main_text_zh);
        mMainTextXl = findViewById(R.id.main_text_xl);
        mMainTextJg = findViewById(R.id.main_text_jg);
        mMainRecycler = findViewById(R.id.main_recycler);
        imageView = findViewById(R.id.sousuo);
        editText = findViewById(R.id.edit_query01);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            default:
                break;
            case R.id.main_img:
                break;
        }
    }

    @Override
    public void ShowSuccess(GoodsBean goodsBean) {
        Toast.makeText(this, "成功——————------55555" + goodsBean.getData().toString(), Toast.LENGTH_SHORT).show();
        List<GoodsBean.DataBean> list = goodsBean.getData();
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
        linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        mMainRecycler.setLayoutManager(linearLayoutManager);
        adapter = new MainAdapter(list, MainActivity.this);
        mMainRecycler.setAdapter(adapter);
    }

    @Override
    public void ShowError(String error) {
        Toast.makeText(this, "失败——————" + error, Toast.LENGTH_SHORT).show();

    }

    @Override
    public Context context() {
        return this;
    }
}

Adapter

public class MainAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private List<GoodsBean.DataBean> list;
    private Context context;

    public MainAdapter(List<GoodsBean.DataBean> list, Context context) {
        this.list = list;
        this.context = context;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false);
        return (new ViewHolder(view));
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
        ((ViewHolder) holder).item_dec.setText(list.get(position).getTitle());
        ((ViewHolder) holder).item_price.setText(list.get(position).getPrice() + "");
        //String imageurl="http"+icon.substring(5);
        String images = list.get(position).getImages();
        String imageurl = "http" + images.substring(5);
        Glide.with(context).load(imageurl).into(((ViewHolder) holder).item_img);
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(context, DetaActivity.class);
                intent.putExtra("aaa", list.get(position).getDetailUrl());
                context.startActivity(intent);
                Toast.makeText(context, "点击了" + position, Toast.LENGTH_LONG).show();

            }
        });
        //ImageLoader.getInstance().displayImage(imageurl, ((ViewHolder) holder).item_img, MyApp.getOptions());
    }

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

    public class ViewHolder extends RecyclerView.ViewHolder {
        private TextView item_dec, item_price;
        private ImageView item_img;

        public ViewHolder(View itemView) {
            super(itemView);
            item_img = itemView.findViewById(R.id.item_img);
            item_dec = itemView.findViewById(R.id.item_dec);
            item_price = itemView.findViewById(R.id.item_price);
        }
    }

}

ShowActivity

public class DetaActivity extends AppCompatActivity {

    private WebView mWebview;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_deta);
        initView();
        mWebview = findViewById(R.id.webview);
        WebSettings settings = mWebview.getSettings();
        //设置js的交互权限
        settings.setJavaScriptEnabled(true);
        //设置允许js弹窗
        settings.setJavaScriptCanOpenWindowsAutomatically(true);
        Intent intent = getIntent();
        String aaa = intent.getStringExtra("aaa");
        Log.d("qwer", aaa);
        //如果不设置webviewclient,请求会跳转到系统浏览器
        mWebview.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                //该方法在Build.VERSION_CODES.LOLLIPOP以前有效,从Build.VERSION_CODES.LOLLIPOP起,建议使用shouldOverrideUrlLoading(WebView, WebResourceRequest)} instead
                //返回false,意味着请求过程里,不管有多少次的跳转请求(即新的请求地址),均交给webView自己处理,这也是此方法的默认处理
                //返回true,说明你自己想根据url,做新的跳转,比如在判断url符合条件的情况下
                return false;
            }

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
                //返回false,意味着请求过程里,不管有多少次的跳转请求(即新的请求地址),均交给webView自己处理,这也是此方法的默认处理
                //返回true,说明你自己想根据url,做新的跳转,比如在判断url符合条件的情况下
                return true;
            }
        });
        // 先载入JS代码
        // 格式规定为:file:///android_asset/文件名.html
        mWebview.loadUrl(aaa);
        // webview只是载体,内容的渲染需要使用webviewChromClient类去实现
        // 通过设置WebChromeClient对象处理JavaScript的对话框
        //设置响应js 的Alert()函数
        mWebview.setWebChromeClient(new WebChromeClient());
    }

    private void initView() {
        mWebview = findViewById(R.id.webview);
    }
}

猜你喜欢

转载自blog.csdn.net/LG_lxb/article/details/85040540