登录搜索详情放大

依赖

compile 'com.youth.banner:banner:1.4.9'
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
compile 'com.squareup.okhttp3:okhttp:3.9.1'
compile 'com.squareup.okio:okio:1.13.0'
compile 'com.google.code.gson:gson:2.6.2'
compile 'com.github.bumptech.glide:glide:3.6.1'
compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'
compile 'com.jcodecraeer:xrecyclerview:1.5.2'
compile 'org.greenrobot:eventbus:3.0.0'
compile 'com.scwang.smartrefresh:SmartRefreshLayout:1.0.4-7'
compile 'com.scwang.smartrefresh:SmartRefreshHeader:1.0.4-7'
权限

<uses-permission android:name="android.permission.INTERNET" />
<activity android:name=".Login.view.MainActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
<activity android:name=".register.view.Main2Activity" />
<activity android:name=".Search.view.SousuoActivity" />
<activity android:name=".xiangqing.Xiangqing" />
<activity android:name=".xiangqing.PicActivity"></activity>
布局

activity_main

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
    tools:context="bwie.com.yueyue.Login.view.MainActivity">

    <TextView
        android:id="@+id/text"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:gravity="center"
        android:text="登录"
        />
    <View
        android:layout_below="@+id/text"
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="#000"></View>
    <LinearLayout
        android:id="@+id/ln"
        android:layout_below="@+id/text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="50dp"
        android:gravity="center"
        android:orientation="vertical">
        <EditText
            android:id="@+id/et_name"
            android:gravity="center"
            android:layout_width="300dp"
            android:layout_height="wrap_content"
            android:hint="请输入手机号"/>
        <EditText
            android:id="@+id/et_pass"
            android:gravity="center"
            android:layout_width="300dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="40dp"
            android:hint="请输入密码"/>
    </LinearLayout>
    <LinearLayout
        android:layout_below="@+id/ln"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_marginTop="40dp"
        android:gravity="center">
        <Button
            android:onClick="login"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="登录"/>
        <Button
            android:onClick="zhuce"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="注册"/>

    </LinearLayout>

</RelativeLayout>
main2

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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="bwie.com.yueyue.register.view.Main2Activity">
    <TextView
        android:id="@+id/text"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:gravity="center"
        android:text="登录"
        />
    <View
        android:layout_below="@+id/text"
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="#000"></View>
    <LinearLayout
        android:id="@+id/ln"
        android:layout_below="@+id/text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="50dp"
        android:gravity="center"
        android:orientation="vertical">
        <EditText
            android:id="@+id/name"
            android:gravity="center"
            android:layout_width="300dp"
            android:layout_height="wrap_content"
            android:hint="请输入手机号"/>
        <EditText
            android:id="@+id/pass"
            android:gravity="center"
            android:layout_width="300dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="40dp"
            android:hint="请输入密码"/>
    </LinearLayout>
    <Button
        android:onClick="liji"
        android:layout_below="@id/ln"
        android:gravity="center"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="40dp"
        android:text="立即注册"/>
</RelativeLayout>
pic

<?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"
    tools:context="bwie.com.yueyue.xiangqing.PicActivity"
    >

    <android.support.v4.view.ViewPager
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/viewpage"
        ></android.support.v4.view.ViewPager>
</LinearLayout>
sousuo

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
    tools:context="bwie.com.yueyue.Search.view.SousuoActivity">
    <LinearLayout
        android:id="@+id/ln"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <TextView
            android:layout_width="0dp"
            android:layout_weight="8.03"
            android:layout_height="wrap_content"
            android:text="搜索商品"
            android:layout_marginTop="10dp"
            android:textSize="18sp"
            android:gravity="center"/>
        <ImageView
            android:onClick="huan"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:src="@drawable/kind_grid"
            tools:ignore="ContentDescription" />
    </LinearLayout>
    <View
        android:layout_below="@+id/ln"
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="#000"></View>
    <LinearLayout
        android:layout_below="@+id/ln"
        android:id="@+id/ln2"
        android:layout_width="368dp"
        android:layout_height="50dp"
        tools:layout_editor_absoluteY="0dp"
        tools:layout_editor_absoluteX="8dp"
        android:orientation="horizontal"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true">
        <EditText
            android:id="@+id/et_sousuo"
            android:layout_weight="9"
            android:layout_width="0dp"
            android:gravity="center_horizontal"
            android:layout_height="wrap_content"
            android:hint="输入搜索关键字"
            />
        <Button
            android:id="@+id/textView2"
            android:layout_width="72dp"
            android:layout_height="wrap_content"
            android:onClick="sousuo"
            android:text="搜索" />

    </LinearLayout>
    <com.jcodecraeer.xrecyclerview.XRecyclerView
        android:layout_below="@+id/ln2"
        android:id="@+id/xrecy"
        android:padding="10dp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></com.jcodecraeer.xrecyclerview.XRecyclerView>
<com.jcodecraeer.xrecyclerview.XRecyclerView
        android:layout_below="@+id/xrecy"
        android:id="@+id/xrecy2"
        android:visibility="gone"
        android:padding="10dp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></com.jcodecraeer.xrecyclerview.XRecyclerView>

</RelativeLayout>
xiangqing

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
    tools:context="bwie.com.yueyue.xiangqing.Xiangqing">
   <android.support.v4.view.ViewPager
       android:layout_width="match_parent"
       android:layout_height="300dp"
       android:id="@+id/vp"
       ></android.support.v4.view.ViewPager>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:padding="5dp"
        android:layout_below="@+id/vp"
        >
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/xiangqing_tv1"
            android:textSize="18dp"
            android:text="标题"
            />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/xiangqing_tv2"
            android:textColor="#f00"
            android:textSize="18dp"
            android:text="原价"
            />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/xiangqing_tv3"
            android:textSize="18dp"
            android:text="现价"
            />
    </LinearLayout>
    <LinearLayout

        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_alignParentBottom="true"
        >
        <TextView
            android:onClick="addCart"
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:text="加入购物车"
            android:textSize="20sp"
            android:layout_gravity="center_horizontal"
            android:gravity="center"
            android:background="@android:color/holo_red_dark"
            />
    </LinearLayout>
</RelativeLayout>
item2_sousuo

<?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">
    <ImageView
        android:id="@+id/item_img"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:src="@mipmap/ic_launcher"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <TextView
            android:id="@+id/item_title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="21dp"
            android:text="标题 标题 标题 标题 ........"
            android:layout_alignParentTop="true"
            android:layout_toRightOf="@+id/item1_img"
            android:layout_toEndOf="@+id/item1_img" />
        <TextView
            android:id="@+id/item_price"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#f00"
            android:text="¥22.90"
            android:layout_alignBaseline="@+id/textView"
            android:layout_alignBottom="@+id/textView"
            android:layout_centerHorizontal="true" />
    </LinearLayout>
</LinearLayout>
item_sousuo

<?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">
    <ImageView
        android:id="@+id/item_img"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:src="@mipmap/ic_launcher"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <TextView
            android:id="@+id/item_title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="21dp"
            android:text="标题 标题 标题 标题 ........"
            android:layout_alignParentTop="true"
            android:layout_toRightOf="@+id/item1_img"
            android:layout_toEndOf="@+id/item1_img" />
        <TextView
            android:id="@+id/item_price"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#f00"
            android:text="¥22.90"
            android:layout_alignBaseline="@+id/textView"
            android:layout_alignBottom="@+id/textView"
            android:layout_centerHorizontal="true" />
    </LinearLayout>
</LinearLayout>
java代码

Login

model

LoginModel

package bwie.com.yueyue.Login.model;

import java.io.IOException;

import bwie.com.yueyue.Login.persenter.ILoginPersenter;
import bwie.com.yueyue.util.OkHttp3Util_02;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;

/**
 * Created by lenovo on 2018/1/18.
 */

public class LoginModel {

    ILoginPersenter iLoginPersenter;
    public LoginModel(ILoginPersenter iLoginPersenter) {

        this.iLoginPersenter = iLoginPersenter;

    }

    public void Net(String number, String pass) {
        OkHttp3Util_02.doGet("http://120.27.23.105/user/login?mobile="+number+"&password="+pass, new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (response.isSuccessful()){
                    String string = response.body().string();
                    iLoginPersenter.OnSuccess(string);
                }
            }
        });
    }
}
persenter

ILoginPersenter

package bwie.com.yueyue.Login.persenter;

/**
 * Created by lenovo on 2018/1/18.
 */

public interface ILoginPersenter {
    void OnSuccess(String string);
}
LoginPersenter

package bwie.com.yueyue.Login.persenter;


import bwie.com.yueyue.Login.model.LoginModel;
import bwie.com.yueyue.Login.view.IMainActivity;

/**
 * Created by lenovo on 2018/1/18.
 */

public class LoginPersenter implements ILoginPersenter{

    private LoginModel loginModel;
    IMainActivity iMainActivity;
    public LoginPersenter(IMainActivity iMainActivity) {
        loginModel = new LoginModel(this);
        this.iMainActivity = iMainActivity;
    }

    public void Net(String number, String pass) {
        loginModel.Net(number,pass);
    }

    @Override
    public void OnSuccess(String string) {
        iMainActivity.onSuccess(string);
    }
    public void Ondestory(){

    }
}
view

IMainActivity

package bwie.com.yueyue.Login.view;

/**
 * Created by lenovo on 2018/1/18.
 */

public interface IMainActivity {

    void onSuccess(String string);
}
MainActivity

package bwie.com.yueyue.Login.view;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

import org.json.JSONException;
import org.json.JSONObject;

import bwie.com.yueyue.Login.persenter.LoginPersenter;
import bwie.com.yueyue.R;
import bwie.com.yueyue.Search.view.SousuoActivity;
import bwie.com.yueyue.register.view.Main2Activity;

public class MainActivity extends AppCompatActivity implements IMainActivity{

    private LoginPersenter loginpersenter;
    private TextView name;
    private TextView pass;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        name = (TextView) findViewById(R.id.et_name);
        pass = (TextView) findViewById(R.id.et_pass);
        loginpersenter = new LoginPersenter(this);

    }
    public void login(View view){
        String text = name.getText().toString();
        String text2 = pass.getText().toString();
        loginpersenter.Net(text,text2);
    }
    public void zhuce(View view){
        Intent intent = new Intent(this, Main2Activity.class);
        startActivity(intent);
    }

    @Override
    public void onSuccess(final String string) {
        if (string!=null){
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    JSONObject jsonObject = null;

                    try {
                        jsonObject = new JSONObject(string);
                        String msg = jsonObject.getString("msg");
                        if(msg.equals("登录成功")){
                            Toast.makeText(MainActivity.this, "登录成功", Toast.LENGTH_SHORT).show();
                            Intent intent = new Intent(MainActivity.this, SousuoActivity.class);
                            startActivity(intent);
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            });
        }
    }
}
register
model
ZhuceBean
 
package bwie.com.yueyue.register.model;

public class ZhuceBean {

    /**
     * msg : 天呢!用户已注册
     * code : 1
     * data : {}
     */

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

    public void setData(String data) {
        this.data = data;
    }
}
ZhuceModel

package bwie.com.yueyue.register.model;
import com.google.gson.Gson;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import bwie.com.yueyue.register.persenter.IZhucePersenter;
import bwie.com.yueyue.util.OkHttp3Util_02;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;

public class ZhuceModel {

    IZhucePersenter iZhucePersenter;

    public ZhuceModel(IZhucePersenter iZhucePersenter) {
        this.iZhucePersenter = iZhucePersenter;
    }
    public void Net(String s, String number, String pass) {
        Map<String,String> params = new HashMap<>();
        params.put("mobile",number);
        params.put("password",pass);
        OkHttp3Util_02.doPost(s, params, new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (response.isSuccessful()){
                    String json = response.body().string();
                    ZhuceBean zhuceBean = new Gson().fromJson(json, ZhuceBean.class);
                    iZhucePersenter.onSuccess(zhuceBean);
                }
            }
        });
    }
}
persenter
IZhucePersenter
 
package bwie.com.yueyue.register.persenter;
import bwie.com.yueyue.register.model.ZhuceBean;
public interface IZhucePersenter {
    void onSuccess(ZhuceBean zhuceBean);
}
ZhucePersenter

package bwie.com.yueyue.register.persenter;
import bwie.com.yueyue.register.model.ZhuceBean;
import bwie.com.yueyue.register.model.ZhuceModel;
import bwie.com.yueyue.register.view.IMain2Activity;

public class ZhucePerester implements IZhucePersenter{
    private ZhuceModel zhuceModel;
    IMain2Activity iMain2Activity;
    public ZhucePerester(IMain2Activity iMain2Activity) {
        this.iMain2Activity = iMain2Activity;
        zhuceModel = new ZhuceModel(this);
    }

    public void Net(String s, String number, String password) {
        zhuceModel.Net(s,number,password);
    }
    @Override
    public void onSuccess(ZhuceBean zhuceBean) {
        iMain2Activity.onSuccess(zhuceBean);
    }
}
view
IMain2Activity
package bwie.com.yueyue.register.view;


import bwie.com.yueyue.register.model.ZhuceBean;

/**
 * Created by lenovo on 2018/1/18.
 */

public interface IMain2Activity {
    void onSuccess(ZhuceBean zhuceBean);
}
Main2Activity

package bwie.com.yueyue.register.view;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import bwie.com.yueyue.Login.view.MainActivity;
import bwie.com.yueyue.R;
import bwie.com.yueyue.register.model.ZhuceBean;
import bwie.com.yueyue.register.persenter.ZhucePerester;
public class Main2Activity extends AppCompatActivity implements IMain2Activity{
    private EditText name;
    private EditText pass;
    private ZhucePerester zhucePerester;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        name = (EditText) findViewById(R.id.name);
        pass = (EditText) findViewById(R.id.pass);
        zhucePerester = new ZhucePerester(this);
    }
    public void liji(View view) {
        String number = name.getText().toString();
        String password = pass.getText().toString();
        zhucePerester.Net("http://120.27.23.105/user/reg",number,password);
    }
    @Override
    public void onSuccess(final ZhuceBean zhuceBean) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                if (zhuceBean.getCode().equals("0")){
                    Toast.makeText(Main2Activity.this, "zhuceBean.getMsg()", Toast.LENGTH_SHORT).show();
                    Intent intent = new Intent(Main2Activity.this, MainActivity.class);
                    startActivity(intent);
                    finish();
                }else {
                    Toast.makeText(Main2Activity.this,zhuceBean.getMsg(),Toast.LENGTH_SHORT).show();
                    finish();
                }
            }
        });
    }
}
Search
SousuoAdapter

package bwie.com.yueyue.Search;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.jcodecraeer.xrecyclerview.XRecyclerView;
import java.util.List;
import bwie.com.yueyue.R;
import bwie.com.yueyue.Search.bean.ShopBean;

public class SousuoAdapter extends XRecyclerView.Adapter<SousuoAdapter.vieholder>{

    Context context;
    List<ShopBean.DataBean> data;
    private OnItemClickListener mOnItemClickListener;
    public SousuoAdapter(Context context, List<ShopBean.DataBean> data) {
        this.context = context;
        this.data = data;
    }

    @Override
    public vieholder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view= LayoutInflater.from(context).inflate(R.layout.item_sousuo,parent,false);

        vieholder vieholder=new vieholder(view);
        return vieholder;
    }
    @Override
    public void onBindViewHolder(vieholder holder, final int position) {
        holder.tv.setText(data.get(position).getTitle());
        holder.tv2.setText("$"+data.get(position).getBargainPrice());
        String[] split = data.get(position).getImages().split("\\|");
        Glide.with(context).load(split[0]).into(holder.img);
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mOnItemClickListener.onClick(position);
            }
        });
    }

    @Override
    public int getItemCount() {
        return data.size();
    }
    class vieholder extends XRecyclerView.ViewHolder{
        ImageView img;
        TextView tv, tv2;
        public vieholder(View itemView) {
            super(itemView);
            img = itemView.findViewById(R.id.item_img);
            tv = itemView.findViewById(R.id.item_title);
            tv2 = itemView.findViewById(R.id.item_price);
        }
    }
    public void setOnItemClickListener(OnItemClickListener onItemClickListener ){
        this. mOnItemClickListener=onItemClickListener;
    }
}
Sousuo2Adapter

package bwie.com.yueyue.Search;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.jcodecraeer.xrecyclerview.XRecyclerView;
import java.util.List;
import bwie.com.yueyue.R;
import bwie.com.yueyue.Search.bean.ShopBean;

public class Sousuo2Adapter extends XRecyclerView.Adapter<Sousuo2Adapter.vieholder>{

    Context context;
    List<ShopBean.DataBean> data;
    private OnItemClickListener mOnItemClickListener;
    public Sousuo2Adapter(Context context, List<ShopBean.DataBean> data) {
        this.context = context;
        this.data = data;
    }

    @Override
    public vieholder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view= LayoutInflater.from(context).inflate(R.layout.item2_sousuo,parent,false);

        vieholder vieholder=new vieholder(view);
        return vieholder;
    }

    @Override
    public void onBindViewHolder(vieholder holder, final int position) {
        holder.tv.setText(data.get(position).getTitle());
        holder.tv2.setText("$"+data.get(position).getBargainPrice());
        String[] split = data.get(position).getImages().split("\\|");
        Glide.with(context).load(split[0]).into(holder.img);
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mOnItemClickListener.onClick(position);
            }
        });
    }

    @Override
    public int getItemCount() {
        return data.size();
    }
    class vieholder extends XRecyclerView.ViewHolder{
        ImageView img;
        TextView tv, tv2;
        public vieholder(View itemView) {
            super(itemView);
            img = itemView.findViewById(R.id.item_img);
            tv = itemView.findViewById(R.id.item_title);
            tv2 = itemView.findViewById(R.id.item_price);
        }
    }
    public void setOnItemClickListener(OnItemClickListener onItemClickListener ){
        this. mOnItemClickListener=onItemClickListener;
    }
}
OnItemClickListener

package bwie.com.yueyue.Search;

public interface OnItemClickListener {
    void onClick(int position);
}
bean
ShopBean

package bwie.com.yueyue.Search.bean;
import java.util.List;

public class ShopBean {
    /**
     * msg : 查询成功
     * code : 0
     * data : [{"bargainPrice":11800,"createtime":"2017-10-10T17:33:37","detailUrl":"https://item.m.jd.com/product/4338107.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t6700/155/2098998076/156185/6cf95035/595dd5a5Nc3a7dab5.jpg!q70.jpg","itemtype":0,"pid":57,"price":5199,"pscid":40,"salenum":4343,"sellerid":1,"subhead":"【i5 MX150 2G显存】全高清窄边框 8G内存 256固态硬盘 支持指纹识别 预装WIN10系统","title":"小米(MI)Air 13.3英寸全金属轻薄笔记本(i5-7200U 8G 256G PCle SSD MX150 2G独显 FHD 指纹识别 Win10)银\r\n"},{"bargainPrice":11800,"createtime":"2017-10-14T21:38:26","detailUrl":"https://item.m.jd.com/product/5025518.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t8830/106/1760940277/195595/5cf9412f/59bf2ef5N5ab7dc16.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5428/70/1520969931/274676/b644dd0d/591128e7Nd2f70da0.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5566/365/1519564203/36911/620c750c/591128eaN54ac3363.jpg!q70.jpg","itemtype":1,"pid":58,"price":6399,"pscid":40,"salenum":545,"sellerid":2,"subhead":"升级4G大显存!Nvme协议Pcie SSD,速度快人一步】GTX1050Ti就选拯救者!专业游戏键盘&新模具全新设计!","title":"联想(Lenovo)拯救者R720 15.6英寸游戏笔记本电脑(i5-7300HQ 8G 1T+128G SSD GTX1050Ti 4G IPS 黑)"},{"bargainPrice":5599,"createtime":"2017-10-10T17:30:32","detailUrl":"https://item.m.jd.com/product/4824715.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends","images":"https://m.360buyimg.com/n12/jfs/t7768/184/1153704394/148460/f42e1432/599a930fN8a85626b.jpg!q70.jpg","itemtype":0,"pid":59,"price":5599,"pscid":40,"salenum":675,"sellerid":3,"subhead":"游戏本选择4G独显,拒绝掉帧】升级版IPS全高清防眩光显示屏,WASD方向键颜色加持,三大出风口立体散热!","title":"戴尔DELL灵越游匣15PR-6648B GTX1050 15.6英寸游戏笔记本电脑(i5-7300HQ 8G 128GSSD+1T 4G独显 IPS)黑"},{"bargainPrice":11800,"createtime":"2017-10-14T21:48:08","detailUrl":"https://mitem.jd.hk/ware/view.action?wareId=1988853309&cachekey=1acb07a701ece8d2434a6ae7fa6870a1","images":"https://m.360buyimg.com/n0/jfs/t6130/97/1370670410/180682/1109582a/593276b1Nd81fe723.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5815/178/2614671118/51656/7f52d137/593276c7N107b725a.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5878/60/2557817477/30873/4502b606/593276caN5a7d6357.jpg!q70.jpg","itemtype":2,"pid":60,"price":13888,"pscid":40,"salenum":466,"sellerid":4,"subhead":"购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)","title":"全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G"},{"bargainPrice":11800,"createtime":"2017-10-14T21:38:26","detailUrl":"https://mitem.jd.hk/ware/view.action?wareId=1988853309&cachekey=1acb07a701ece8d2434a6ae7fa6870a1","images":"https://m.360buyimg.com/n0/jfs/t6130/97/1370670410/180682/1109582a/593276b1Nd81fe723.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5815/178/2614671118/51656/7f52d137/593276c7N107b725a.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5878/60/2557817477/30873/4502b606/593276caN5a7d6357.jpg!q70.jpg","itemtype":1,"pid":61,"price":14999,"pscid":40,"salenum":5535,"sellerid":5,"subhead":"购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)","title":"全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G"},{"bargainPrice":11800,"createtime":"2017-10-03T23:53:28","detailUrl":"https://mitem.jd.hk/ware/view.action?wareId=1988853309&cachekey=1acb07a701ece8d2434a6ae7fa6870a1","images":"https://m.360buyimg.com/n0/jfs/t6130/97/1370670410/180682/1109582a/593276b1Nd81fe723.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5815/178/2614671118/51656/7f52d137/593276c7N107b725a.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5878/60/2557817477/30873/4502b606/593276caN5a7d6357.jpg!q70.jpg","itemtype":0,"pid":62,"price":15999,"pscid":40,"salenum":43,"sellerid":6,"subhead":"购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)","title":"全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G"},{"bargainPrice":11800,"createtime":"2017-10-14T21:38:26","detailUrl":"https://mitem.jd.hk/ware/view.action?wareId=1988853309&cachekey=1acb07a701ece8d2434a6ae7fa6870a1","images":"https://m.360buyimg.com/n0/jfs/t6130/97/1370670410/180682/1109582a/593276b1Nd81fe723.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5815/178/2614671118/51656/7f52d137/593276c7N107b725a.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5878/60/2557817477/30873/4502b606/593276caN5a7d6357.jpg!q70.jpg","itemtype":1,"pid":63,"price":10000,"pscid":40,"salenum":3232,"sellerid":7,"subhead":"购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)","title":"全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G"},{"bargainPrice":11800,"createtime":"2017-10-03T23:43:53","detailUrl":"https://mitem.jd.hk/ware/view.action?wareId=1988853309&cachekey=1acb07a701ece8d2434a6ae7fa6870a1","images":"https://m.360buyimg.com/n0/jfs/t6130/97/1370670410/180682/1109582a/593276b1Nd81fe723.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5815/178/2614671118/51656/7f52d137/593276c7N107b725a.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5878/60/2557817477/30873/4502b606/593276caN5a7d6357.jpg!q70.jpg","itemtype":0,"pid":64,"price":11000,"pscid":40,"salenum":0,"sellerid":8,"subhead":"购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)","title":"全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G"},{"bargainPrice":11800,"createtime":"2017-10-14T21:48:08","detailUrl":"https://mitem.jd.hk/ware/view.action?wareId=1988853309&cachekey=1acb07a701ece8d2434a6ae7fa6870a1","images":"https://m.360buyimg.com/n0/jfs/t6130/97/1370670410/180682/1109582a/593276b1Nd81fe723.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5815/178/2614671118/51656/7f52d137/593276c7N107b725a.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5878/60/2557817477/30873/4502b606/593276caN5a7d6357.jpg!q70.jpg","itemtype":2,"pid":65,"price":12000,"pscid":40,"salenum":868,"sellerid":9,"subhead":"购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)","title":"全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G"},{"bargainPrice":11800,"createtime":"2017-10-14T21:38:26","detailUrl":"https://mitem.jd.hk/ware/view.action?wareId=1988853309&cachekey=1acb07a701ece8d2434a6ae7fa6870a1","images":"https://m.360buyimg.com/n0/jfs/t6130/97/1370670410/180682/1109582a/593276b1Nd81fe723.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5815/178/2614671118/51656/7f52d137/593276c7N107b725a.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5878/60/2557817477/30873/4502b606/593276caN5a7d6357.jpg!q70.jpg","itemtype":1,"pid":66,"price":13000,"pscid":40,"salenum":7676,"sellerid":10,"subhead":"购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)","title":"全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G"}]
     * page : 1
     */
    private String msg;
    private String code;
    private String page;
    private List<DataBean> 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 String getPage() {
        return page;
    }
    public void setPage(String page) {
        this.page = page;
    }
    public List<DataBean> getData() {
        return data;
    }
    public void setData(List<DataBean> data) {
        this.data = data;
    }
    public static class DataBean {
        /**
         * bargainPrice : 11800.0
         * createtime : 2017-10-10T17:33:37
         * detailUrl : https://item.m.jd.com/product/4338107.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends
         * images : https://m.360buyimg.com/n0/jfs/t6700/155/2098998076/156185/6cf95035/595dd5a5Nc3a7dab5.jpg!q70.jpg
         * itemtype : 0
         * pid : 57
         * price : 5199.0
         * pscid : 40
         * salenum : 4343
         * sellerid : 1
         * subhead : 【i5 MX150 2G显存】全高清窄边框 8G内存 256固态硬盘 支持指纹识别 预装WIN10系统
         * title : 小米(MI)Air 13.3英寸全金属轻薄笔记本(i5-7200U 8G 256G PCle SSD MX150 2G独显 FHD 指纹识别 Win10)银

         */
        private double bargainPrice;
        private String createtime;
        private String detailUrl;
        private String images;
        private int itemtype;
        private int pid;
        private double price;
        private int pscid;
        private int salenum;
        private int sellerid;
        private String subhead;
        private String title;
        public double getBargainPrice() {
            return bargainPrice;
        }
        public void setBargainPrice(double bargainPrice) {
            this.bargainPrice = bargainPrice;
        }
        public String getCreatetime() {
            return createtime;
        }
        public void setCreatetime(String createtime) {
            this.createtime = createtime;
        }
        public String getDetailUrl() {
            return detailUrl;
        }
        public void setDetailUrl(String detailUrl) {
            this.detailUrl = detailUrl;
        }
        public String getImages() {
            return images;
        }
        public void setImages(String images) {
            this.images = images;
        }
        public int getItemtype() {
            return itemtype;
        }
        public void setItemtype(int itemtype) {
            this.itemtype = itemtype;
        }
        public int getPid() {
            return pid;
        }
        public void setPid(int pid) {
            this.pid = pid;
        }

        public double getPrice() {
            return price;
        }
        public void setPrice(double price) {
            this.price = price;
        }
        public int getPscid() {
            return pscid;
        }
        public void setPscid(int pscid) {
            this.pscid = pscid;
        }
        public int getSalenum() {
            return salenum;
        }
        public void setSalenum(int salenum) {
            this.salenum = salenum;
        }
        public int getSellerid() {
            return sellerid;
        }
        public void setSellerid(int sellerid) {
            this.sellerid = sellerid;
        }
        public String getSubhead() {
            return subhead;
        }

        public void setSubhead(String subhead) {
            this.subhead = subhead;
        }
        public String getTitle() {
            return title;
        }
        public void setTitle(String title) {
            this.title = title;
        }
    }
}
model
SousuoModel

package bwie.com.yueyue.Search.model;
import com.google.gson.Gson;
import java.io.IOException;
import bwie.com.yueyue.Search.bean.ShopBean;
import bwie.com.yueyue.Search.persenter.ISousuoPersenter;
import bwie.com.yueyue.util.OkHttp3Util_02;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;

public class SousuoModel {
    ISousuoPersenter iSousuoPersenter;

    public SousuoModel(ISousuoPersenter iSousuoPersenter) {
        this.iSousuoPersenter = iSousuoPersenter;
    }

    public void getSou(String name, int page) {

        OkHttp3Util_02.doGet("https://www.zhaoapi.cn/product/searchProducts?keywords="+name+"&page="+page+"&source=android", new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (response.isSuccessful()){
                    //得到请求下来的数据
                    String string = response.body().string();
                    Gson gson = new Gson();
                    //解析
                    ShopBean shopBean = gson.fromJson(string, ShopBean.class);
                    iSousuoPersenter.onSuccess(shopBean);
                }
            }
        });
    }
}
persenter
ISousuoPersenter
package bwie.com.yueyue.Search.persenter;
import bwie.com.yueyue.Search.bean.ShopBean;
public interface ISousuoPersenter {
    void onSuccess(ShopBean shopBean);
}
SousuoPersenter
package bwie.com.yueyue.Search.persenter;

import bwie.com.yueyue.Search.bean.ShopBean;
import bwie.com.yueyue.Search.model.SousuoModel;
import bwie.com.yueyue.Search.view.ISousuoActivity;

public class SousuoPersenter implements ISousuoPersenter{
    private SousuoModel sousuoModel;
    ISousuoActivity iSousuoActivity;
    public SousuoPersenter(ISousuoActivity iSousuoActivity) {
        this.iSousuoActivity = iSousuoActivity;
        sousuoModel = new SousuoModel(this);
    }

    public void getSou(String name, int page) {
        sousuoModel.getSou(name,page);
    }

    @Override
    public void onSuccess(ShopBean shopBean) {
        iSousuoActivity.onSuccess(shopBean);
    }
}
view
ISousuoActivity
package bwie.com.yueyue.Search.view;


import bwie.com.yueyue.Search.bean.ShopBean;

/**
 * Created by lenovo on 2018/1/18.
 */

public interface ISousuoActivity {
    void onSuccess(ShopBean shopBean);
}
SousuoActivity
package bwie.com.yueyue.Search.view;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

import com.jcodecraeer.xrecyclerview.XRecyclerView;

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

import bwie.com.yueyue.R;
import bwie.com.yueyue.Search.OnItemClickListener;
import bwie.com.yueyue.Search.Sousuo2Adapter;
import bwie.com.yueyue.Search.SousuoAdapter;
import bwie.com.yueyue.Search.bean.ShopBean;
import bwie.com.yueyue.Search.persenter.SousuoPersenter;
import bwie.com.yueyue.xiangqing.Xiangqing;


public class SousuoActivity extends AppCompatActivity implements ISousuoActivity{

    private EditText et_sousuo;
    private XRecyclerView xrecy;
    private XRecyclerView xrecy2;
    private SousuoPersenter sousuoPersenter;
    private SousuoAdapter adapter;
    private Sousuo2Adapter adapter2;

    private int page = 1;
    private List<ShopBean.DataBean> list;
    private List<ShopBean.DataBean> data;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sousuo);
        et_sousuo = (EditText) findViewById(R.id.et_sousuo);
        xrecy = (XRecyclerView) findViewById(R.id.xrecy);
        xrecy2 = (XRecyclerView) findViewById(R.id.xrecy2);
        sousuoPersenter = new SousuoPersenter(this);
        xrecy.setLayoutManager(new GridLayoutManager(SousuoActivity.this, 2, LinearLayoutManager.VERTICAL, false));
        xrecy2.setLayoutManager(new LinearLayoutManager(SousuoActivity.this, LinearLayoutManager.VERTICAL, false));
    }
    public void sousuo(View view){
        sousuoPersenter.getSou(et_sousuo.getText().toString(),page);
    }
    boolean flag = false;
    public void huan(View view){
        if (flag){
            flag = false;
            xrecy.setLayoutManager(new LinearLayoutManager(SousuoActivity.this,LinearLayoutManager.VERTICAL,false ));
            //刷新
            adapter.notifyDataSetChanged();
        }else {
            xrecy.setLayoutManager(new GridLayoutManager(SousuoActivity.this, 2, LinearLayoutManager.VERTICAL, false));
            adapter.notifyDataSetChanged();
            flag = true;
        }
    }
    @Override
    public void onSuccess(final ShopBean shopBean) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                list = new ArrayList<ShopBean.DataBean>();
                data = shopBean.getData();

                list.addAll(data);
                setAdapter();
                xrecy.setLoadingListener(new XRecyclerView.LoadingListener() {
                    @Override
                    public void onRefresh() {
                        list.clear();
                        setAdapter();
                        page = 1;
                        sousuoPersenter.getSou(et_sousuo.getText().toString(),page);
                    }
                    @Override
                    public void onLoadMore() {
                        Toast.makeText(SousuoActivity.this, "加载了更多", Toast.LENGTH_SHORT).show();

                        page++;
                        sousuoPersenter.getSou(et_sousuo.getText().toString(),page);

                    }
                });
                xrecy2.setLoadingListener(new XRecyclerView.LoadingListener() {
                    @Override
                    public void onRefresh() {
                        list.clear();
                        setAdapter();
                        page = 1;
                        sousuoPersenter.getSou(et_sousuo.getText().toString(),page);

                    }
                    @Override
                    public void onLoadMore() {
                        Toast.makeText(SousuoActivity.this, "加载了更多", Toast.LENGTH_SHORT).show();
                        page++;
                        sousuoPersenter.getSou(et_sousuo.getText().toString(),page);
                    }
                });
                adapter.setOnItemClickListener(new OnItemClickListener() {
                    @Override
                    public void onClick(int position) {
                        Intent intent = new Intent(SousuoActivity.this, Xiangqing.class);
                        intent.putExtra("pid",data.get(position).getPid());
                        startActivity(intent);
                    }
                });
                adapter2.setOnItemClickListener(new OnItemClickListener() {
                    @Override
                    public void onClick(int position) {
                        Intent intent = new Intent(SousuoActivity.this, Xiangqing.class);
                        intent.putExtra("pid",data.get(position).getPid());
                        startActivity(intent);
                    }
                });
            }
        });
    }
    public void setAdapter(){
        if (adapter == null){
            adapter = new SousuoAdapter(SousuoActivity.this, list);
            //分割线
            xrecy.setAdapter(adapter);
        }else{
            adapter.notifyDataSetChanged();
        }

        if (adapter2 == null){
            adapter2 = new Sousuo2Adapter(SousuoActivity.this, list);
            //分割线
            xrecy2.setAdapter(adapter2);
        }else{
            adapter2.notifyDataSetChanged();
        }

        xrecy.refreshComplete();
        xrecy2.refreshComplete();
    }
}
util
OkHttp3Util_02

package bwie.com.yueyue.util;


import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Environment;
import android.util.Log;
import android.widget.Toast;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;

import okhttp3.Cache;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
/**
 * Created by lenovo on 2018/1/18.
 * 公共参数封装分为两种方式....source=android,,,appVersion=100
 *      一:封装到doGet和doPost方法中
 *
 *
 *      二:封装到拦截器(interceptor):拦截一个请求,然后添加参数进去
 */
public class OkHttp3Util_02 {
    /**
     * 懒汉 安全 加同步
     * 1.私有的静态成员变量 只声明不创建
     * 2.私有的构造方法
     * 3.提供返回实例的静态方法
     */
    private static OkHttpClient okHttpClient = null;
    private OkHttp3Util_02() {
    }
    public static OkHttpClient getInstance() {

        if (okHttpClient == null) {
            //加同步安全
            synchronized (OkHttp3Util_02.class) {
                if (okHttpClient == null) {
                    //okhttp可以缓存数据....指定缓存路径
                    File sdcache = new File(Environment.getExternalStorageDirectory(), "cache");
                    //指定缓存大小
                    int cacheSize = 10 * 1024 * 1024;

                    okHttpClient = new OkHttpClient.Builder()//构建器
                            .connectTimeout(15, TimeUnit.SECONDS)//连接超时
                            .writeTimeout(20, TimeUnit.SECONDS)//写入超时
                            .readTimeout(20, TimeUnit.SECONDS)//读取超时
                            .cache(new Cache(sdcache.getAbsoluteFile(), cacheSize))//设置缓存
                            .build();
                }
            }
        }
        return okHttpClient;
    }
    /**
     * get请求
     * 参数1 url
     * 参数2 回调Callback
     *
     * oldUrl表示老的地址,,,是没封装公共参数之前的地址....公共参数指的是source=android
     *
     * // 1.http://www.baoidu.com/login                --------? key=value&key=value
     // 2.http://www.baoidu.com/login?               --------- key=value&key=value
     // 3.http://www.baoidu.com/login?mobile=11111    -----&key=value&key=value
     */
    public static void doGet(String oldUrl, Callback callback) {
        //要添加的公共参数...map
        Map<String,String> map = new HashMap<>();
        map.put("source","android");
        StringBuilder stringBuilder = new StringBuilder();//创建一个stringBuilder...字符串缓冲区
        stringBuilder.append(oldUrl);
        if (oldUrl.contains("?")){
            //?在最后面....2类型
            if (oldUrl.indexOf("?") == oldUrl.length()-1){
            }else {
                //3类型...拼接上&
                stringBuilder.append("&");
            }
        }else {
            //不包含? 属于1类型,,,先拼接上?号
            stringBuilder.append("?");
        }

        //添加公共参数....source=android&appVersion=100&
        for (Map.Entry<String,String> entry: map.entrySet()) {
            //拼接
            stringBuilder.append(entry.getKey())
                    .append("=")
                    .append(entry.getValue())
                    .append("&");
        }
        //删掉最后一个&符号
        if (stringBuilder.indexOf("&") != -1){
            stringBuilder.deleteCharAt(stringBuilder.lastIndexOf("&"));
        }
        //得到含有公共参数的新路径.....使用新路径去请求
        String newUrl = stringBuilder.toString();
        //创建OkHttpClient请求对象
        OkHttpClient okHttpClient = getInstance();
        //创建Request
        Request request = new Request.Builder().url(newUrl).build();
        //得到Call对象
        Call call = okHttpClient.newCall(request);
        //执行异步请求
        call.enqueue(callback);
    }
    /**
     * post请求
     * 参数1 url
     * 参数2 Map<String, String> params post请求的时候给服务器传的数据
     *      add..("","")
     *      add()
     */
    public static void doPost(String url, Map<String, String> params, Callback callback) {
        //要添加的公共参数...map
        Map<String,String> map = new HashMap<>();
        map.put("source","android");
        //创建OkHttpClient请求对象
        OkHttpClient okHttpClient = getInstance();
        //3.x版本post请求换成FormBody 封装键值对参数
        FormBody.Builder builder = new FormBody.Builder();
        //遍历集合,,,map集合遍历方式
        for (String key : params.keySet()) {
            builder.add(key, params.get(key));

        }
        //添加公共参数的map结合中的参数
        for (String key : map.keySet()) {
            builder.add(key, map.get(key));
        }
        //创建Request....formBody...new formBody.Builder()...add()....build()
        Request request = new Request.Builder().url(url).post(builder.build()).build();
        Call call = okHttpClient.newCall(request);
        call.enqueue(callback);
    }
    /**
     * post请求上传文件....包括图片....流的形式传任意文件...
     * 参数1 url
     * file表示上传的文件
     * fileName....文件的名字,,例如aaa.jpg
     * params ....传递除了file文件 其他的参数放到map集合
     *
     */
    public static void uploadFile(String url, File file, String fileName,Map<String,String> params,Callback callback) {
        //创建OkHttpClient请求对象
        OkHttpClient okHttpClient = getInstance();
        //MultipartBody多功能的请求实体对象,,,formBody只能传表单形式的数据
        MultipartBody.Builder builder = new MultipartBody.Builder();
        builder.setType(MultipartBody.FORM);

        //参数
        if (params != null){
            for (String key : params.keySet()){
                builder.addFormDataPart(key,params.get(key));
            }
        }
        //文件...参数name指的是请求路径中所接受的参数...如果路径接收参数键值是fileeeee,此处应该改变
        builder.addFormDataPart("file",fileName, RequestBody.create(MediaType.parse("application/octet-stream"),file));

        //构建
        MultipartBody multipartBody = builder.build();

        //创建Request
        Request request = new Request.Builder().url(url).post(multipartBody).build();

        //得到Call
        Call call = okHttpClient.newCall(request);
        //执行请求
        call.enqueue(callback);

    }
    /**
     * Post请求发送JSON数据....{"name":"zhangsan","pwd":"123456"}
     * 参数一:请求Url
     * 参数二:请求的JSON
     * 参数三:请求回调
     */
    public static void doPostJson(String url, String jsonParams, Callback callback) {
        RequestBody requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), jsonParams);
        Request request = new Request.Builder().url(url).post(requestBody).build();
        Call call = getInstance().newCall(request);
        call.enqueue(callback);

    }
    /**
     * 下载文件 以流的形式把apk写入的指定文件 得到file后进行安装
     * 参数er:请求Url
     * 参数san:保存文件的文件夹....download
     */
    public static void download(final Activity context, final String url, final String saveDir) {
        //get请求
        Request request = new Request.Builder().url(url).build();
        Call call = getInstance().newCall(request);

        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                //com.orhanobut.logger.Logger.e(e.getLocalizedMessage());
            }
            @Override
            public void onResponse(Call call, final Response response) throws IOException {
                InputStream is = null;
                byte[] buf = new byte[2048];
                int len = 0;
                FileOutputStream fos = null;
                try {
                    //response.body().string()...json限制是1M大小...byteStream()流的方式
                    is = response.body().byteStream();//以字节流的形式拿回响应实体内容
                    //apk保存路径
                    final String fileDir = isExistDir(saveDir);
                    //文件
                    File file = new File(fileDir, getNameFromUrl(url));
                    fos = new FileOutputStream(file);
                    while ((len = is.read(buf)) != -1) {
                        fos.write(buf, 0, len);
                    }
                    fos.flush();
                    context.runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(context, "下载成功:" + fileDir + "," + getNameFromUrl(url), Toast.LENGTH_SHORT).show();
                        }
                    });
                    //apk下载完成后 调用系统的安装方法......覆盖安装,,,只有包名和签名的应用,并且版本和版本号升级后的才能安装
                    Intent intent = new Intent(Intent.ACTION_VIEW);
                    intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
                    context.startActivity(intent);
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                    if (is != null) is.close();
                    if (fos != null) fos.close();
                }
            }
        });
    }

    /**
     * 判断下载目录是否存在......并返回绝对路径
     *
     * @param saveDir
     * @return
     * @throws IOException
     */
    public static String isExistDir(String saveDir) throws IOException {
        // 下载位置
        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            File downloadFile = new File(Environment.getExternalStorageDirectory(), saveDir);
            if (!downloadFile.mkdirs()) {
                downloadFile.createNewFile();
            }
            String savePath = downloadFile.getAbsolutePath();
            Log.e("savePath", savePath);
            return savePath;
        }
        return null;
    }
    /**
     * @param url
     * @return 从下载连接中解析出文件名
     */
    private static String getNameFromUrl(String url) {
        return url.substring(url.lastIndexOf("/") + 1);
    }
}
xiangqing
ZoomlmageView

package bwie.com.yueyue.xiangqing;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Matrix;
import android.graphics.RectF;
import android.graphics.drawable.Drawable;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.util.Log;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.ScaleGestureDetector;
import android.view.ScaleGestureDetector.OnScaleGestureListener;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewConfiguration;
import android.view.ViewTreeObserver.OnGlobalLayoutListener;
import android.widget.ImageView;
/**
 * Created by Dash on 2018/1/17.
 */
@SuppressLint("AppCompatCustomView")
public class ZoomImageView extends ImageView implements OnGlobalLayoutListener, OnScaleGestureListener, OnTouchListener {
    private boolean mOnce;
    /**
     * 初始化时缩放的值
     */
    private float mInitScale;

    /**
     * 双击放大值到达的值
     */
    private float mMidScale;
    /**
     * 放大的最大值
     */
    private float mMaxScale;
    private Matrix mScaleMatrix;
    /**
     * 捕获用户多指触控时缩放的比例
     */
    private ScaleGestureDetector mScaleGestureDetector;

    // **********自由移动的变量***********
    /**
     * 记录上一次多点触控的数量
     */
    private int mLastPointerCount;
    private float mLastX;
    private float mLastY;
    private int mTouchSlop;
    private boolean isCanDrag;
    private boolean isCheckLeftAndRight;
    private boolean isCheckTopAndBottom;

    // *********双击放大与缩小*********
    private GestureDetector mGestureDetector;
    private boolean isAutoScale;
    public ZoomImageView(Context context) {
        this(context, null);
    }
    public ZoomImageView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }
    public ZoomImageView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        // init
        mScaleMatrix = new Matrix();
        setScaleType(ScaleType.MATRIX);
        setOnTouchListener(this);
        mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
        mScaleGestureDetector = new ScaleGestureDetector(context, this);
        mGestureDetector = new GestureDetector(context,
                new GestureDetector.SimpleOnGestureListener() {
                    @Override
                    public boolean onDoubleTap(MotionEvent e) {
                        if (isAutoScale) {
                            return true;
                        }
                        float x = e.getX();
                        float y = e.getY();
                        if (getScale() < mMidScale) {
                            postDelayed(new AutoScaleRunnable(mMidScale, x, y), 16);
                            isAutoScale = true;
                        } else {
                            postDelayed(new AutoScaleRunnable(mInitScale, x, y), 16);
                            isAutoScale = true;
                        }
                        return true;
                    }
                });
    }
    /**
     * 自动放大与缩小
     *
     * @author zhangyan@lzt.com.cn
     *
     */
    private class AutoScaleRunnable implements Runnable {
        /**
         * 缩放的目标值
         */
        private float mTargetScale;
        // 缩放的中心点
        private float x;
        private float y;
        private final float BIGGER = 1.07f;
        private final float SMALL = 0.93f;
        private float tmpScale;
        /**
         * @param mTargetScale
         * @param x
         * @param y
         */
        public AutoScaleRunnable(float mTargetScale, float x, float y) {
            this.mTargetScale = mTargetScale;
            this.x = x;
            this.y = y;

            if (getScale() < mTargetScale) {
                tmpScale = BIGGER;
            }
            if (getScale() > mTargetScale) {
                tmpScale = SMALL;
            }
        }
        @Override
        public void run() {
            //进行缩放
            mScaleMatrix.postScale(tmpScale, tmpScale, x, y);
            checkBorderAndCenterWhenScale();
            setImageMatrix(mScaleMatrix);
            float currentScale = getScale();
            if ((tmpScale >1.0f && currentScale <mTargetScale) ||(tmpScale<1.0f &&currentScale>mTargetScale)) {
                //这个方法是重新调用run()方法
                postDelayed(this, 16);
            }else{
                //设置为我们的目标值
                float scale = mTargetScale/currentScale;
                mScaleMatrix.postScale(scale, scale, x, y);
                checkBorderAndCenterWhenScale();
                setImageMatrix(mScaleMatrix);

                isAutoScale = false;
            }
        }
    }
    /**
     * 获取ImageView加载完成的图片
     */
    @Override
    public void onGlobalLayout() {
        if (!mOnce) {
            // 得到控件的宽和高
            int width = getWidth();
            int height = getHeight();
            // 得到我们的图片,以及宽和高
            Drawable drawable = getDrawable();
            if (drawable == null) {
                return;
            }
            int dh = drawable.getIntrinsicHeight();
            int dw = drawable.getIntrinsicWidth();
            float scale = 0.5f;

            // 图片的宽度大于控件的宽度,图片的高度小于空间的高度,我们将其缩小
            if (dw > width && dh < height) {
                scale = width * 1.0f / dw;
            }

            // 图片的宽度小于控件的宽度,图片的高度大于空间的高度,我们将其缩小
            if (dh > height && dw < width) {
                scale = height * 1.0f / dh;
            }
            // 缩小值
            if (dw > width && dh > height) {
                scale = Math.min(width * 1.0f / dw, height * 1.0f / dh);
            }
            // 放大值
            if (dw < width && dh < height) {
                scale = Math.min(width * 1.0f / dw, height * 1.0f / dh);
            }
            /**
             * 得到了初始化时缩放的比例
             */
            mInitScale = scale;
            mMaxScale = mInitScale * 4;
            mMidScale = mInitScale * 2;
            // 将图片移动至控件的中间
            int dx = getWidth() / 2 - dw / 2;
            int dy = getHeight() / 2 - dh / 2;

            mScaleMatrix.postTranslate(dx, dy);
            mScaleMatrix.postScale(mInitScale, mInitScale, width / 2,
                    height / 2);
            setImageMatrix(mScaleMatrix);

            mOnce = true;
        }
    }

    /**
     * 注册OnGlobalLayoutListener这个接口
     */
    @Override
    protected void onAttachedToWindow() {
        super.onAttachedToWindow();
        getViewTreeObserver().addOnGlobalLayoutListener(this);
    }

    /**
     * 取消OnGlobalLayoutListener这个接口
     */
    @SuppressWarnings("deprecation")
    @Override
    protected void onDetachedFromWindow() {
        super.onDetachedFromWindow();
        getViewTreeObserver().removeGlobalOnLayoutListener(this);
    }

    /**
     * 获取当前图片的缩放值
     *
     * @return
     */
    public float getScale() {
        float[] values = new float[9];
        mScaleMatrix.getValues(values);
        return values[Matrix.MSCALE_X];
    }
    // 缩放区间时initScale maxScale
    @Override
    public boolean onScale(ScaleGestureDetector detector) {
        float scale = getScale();
        float scaleFactor = detector.getScaleFactor();
        if (getDrawable() == null) {
            return true;
        }
        // 缩放范围的控制
        if ((scale < mMaxScale && scaleFactor > 1.0f)
                || (scale > mInitScale && scaleFactor < 1.0f)) {
            if (scale * scaleFactor < mInitScale) {
                scaleFactor = mInitScale / scale;
            }
            if (scale * scaleFactor > mMaxScale) {
                scale = mMaxScale / scale;
            }
            // 缩放
            mScaleMatrix.postScale(scaleFactor, scaleFactor,
                    detector.getFocusX(), detector.getFocusY());
            checkBorderAndCenterWhenScale();
            setImageMatrix(mScaleMatrix);
        }
        return true;
    }
    /**
     * 获得图片放大缩小以后的宽和高,以及left,right,top,bottom
     *
     * @return
     */
    private RectF getMatrixRectF() {
        Matrix matrix = mScaleMatrix;
        RectF rectF = new RectF();
        Drawable d = getDrawable();
        if (d != null) {
            rectF.set(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
            matrix.mapRect(rectF);
        }
        return rectF;
    }
    /**
     * 在缩放的时候进行边界以及我们的位置的控制
     */
    private void checkBorderAndCenterWhenScale() {
        RectF rectF = getMatrixRectF();
        float deltaX = 0;
        float deltaY = 0;
        int width = getWidth();
        int height = getHeight();
        // 缩放时进行边界检测,防止出现白边
        if (rectF.width() >= width) {
            if (rectF.left > 0) {
                deltaX = -rectF.left;
            }
            if (rectF.right < width) {
                deltaX = width - rectF.right;
            }
        }
        if (rectF.height() >= height) {
            if (rectF.top > 0) {
                deltaY = -rectF.top;
            }
            if (rectF.bottom < height) {
                deltaY = height - rectF.bottom;
            }
        }
        /**
         * 如果宽度或高度小于空间的宽或者高,则让其居中
         */
        if (rectF.width() < width) {
            deltaX = width / 2f - rectF.right + rectF.width() / 2f;
        }
        if (rectF.height() < height) {
            deltaY = height / 2f - rectF.bottom + rectF.height() / 2f;
        }
        mScaleMatrix.postTranslate(deltaX, deltaY);
    }
    @Override
    public boolean onScaleBegin(ScaleGestureDetector detector) {
        return true;
    }
    @Override
    public void onScaleEnd(ScaleGestureDetector detector) {
    }
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if (mGestureDetector.onTouchEvent(event)) {
            return true;
        }
        mScaleGestureDetector.onTouchEvent(event);
        float x = 0;
        float y = 0;
        // 拿到多点触控的数量
        int pointerCount = event.getPointerCount();
        for (int i = 0; i < pointerCount; i++) {
            x += event.getX(i);
            y += event.getY(i);
        }
        x /= pointerCount;
        y /= pointerCount;
        if (mLastPointerCount != pointerCount) {
            isCanDrag = false;
            mLastX = x;
            mLastY = y;
        }
        mLastPointerCount = pointerCount;
        RectF rectF = getMatrixRectF();
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                if (rectF.width()>getWidth() +0.01|| rectF.height()>getHeight()+0.01) {
                    if(getParent() instanceof ViewPager)
                        getParent().requestDisallowInterceptTouchEvent(true);
                }
                break;
            case MotionEvent.ACTION_MOVE:
                if (rectF.width()>getWidth()+0.01 || rectF.height()>getHeight()+0.01) {
                    if(getParent() instanceof ViewPager){
                        Log.e("---","----+++");
                        getParent().requestDisallowInterceptTouchEvent(true);
                    }
                }
                float dx = x - mLastX;
                float dy = y - mLastY;
                if (!isCanDrag) {
                    isCanDrag = isMoveAction(dx, dy);
                }
                if (isCanDrag) {
                    if (getDrawable() != null) {
                        isCheckLeftAndRight = isCheckTopAndBottom = true;
                        // 如果宽度小于控件宽度,不允许横向移动
                        if (rectF.width() < getWidth()) {
                            isCheckLeftAndRight = false;
                            dx = 0;
                        }
                        // 如果高度小于控件高度,不允许纵向移动
                        if (rectF.height() < getHeight()) {
                            isCheckTopAndBottom = false;
                            dy = 0;
                        }
                        mScaleMatrix.postTranslate(dx, dy);
                        checkBorderWhenTranslate();
                        setImageMatrix(mScaleMatrix);
                    }
                }
                mLastX = x;
                mLastY = y;
                break;
            case MotionEvent.ACTION_UP:
            case MotionEvent.ACTION_CANCEL:
                mLastPointerCount = 0;
                break;
            default:
                break;
        }
        return true;
    }
    /**
     * 当移动时进行边界检查
     */
    private void checkBorderWhenTranslate() {
        RectF rectF = getMatrixRectF();
        float deltaX = 0;
        float deltaY = 0;
        int width = getWidth();
        int heigth = getHeight();

        if (rectF.top > 0 && isCheckTopAndBottom) {
            deltaY = -rectF.top;
        }
        if (rectF.bottom < heigth && isCheckTopAndBottom) {
            deltaY = heigth - rectF.bottom;
        }
        if (rectF.left > 0 && isCheckLeftAndRight) {
            deltaX = -rectF.left;
        }
        if (rectF.right < width && isCheckLeftAndRight) {
            deltaX = width - rectF.right;
        }
        mScaleMatrix.postTranslate(deltaX, deltaY);
    }
    /**
     * 判断是否是move
     *
     * @param dx
     * @param dy
     * @return
     */
    private boolean isMoveAction(float dx, float dy) {
        return Math.sqrt(dx * dx + dy * dy) > mTouchSlop;
    }
}
Xiangqing

package bwie.com.yueyue.xiangqing;
import android.content.Intent;
import android.graphics.Paint;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.bumptech.glide.Glide;
import java.util.ArrayList;
import bwie.com.yueyue.R;
import bwie.com.yueyue.xiangqing.persenter.XiangqingPersenter;
public class Xiangqing extends AppCompatActivity implements IXiangqing{
   ViewPager vp;
    private TextView tv1,tv2,tv3;
    private XiangqingPersenter xiangqingPersenter;
    private XiangBean.DataBean data;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_xiangqing);
        tv1 = (TextView) findViewById(R.id.xiangqing_tv1);
        tv2 = (TextView)findViewById(R.id.xiangqing_tv2);
        tv3 = (TextView)findViewById(R.id.xiangqing_tv3);
        vp= (ViewPager) findViewById(R.id.vp);
        Intent intent = getIntent();
        int pid = intent.getIntExtra("pid", 0);
        Log.i("TAG", "传过来的商品的pid: "+pid);
        xiangqingPersenter = new XiangqingPersenter(this);
        xiangqingPersenter.getData(pid);
    }
    @Override
    public void onSuccess(final XiangBean xiangBean) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                final ArrayList<String> list=new ArrayList<>();
                data = xiangBean.getData();
                String[] split = xiangBean.getData().getImages().split("\\|");
                for (int i=0;i<split.length;i++){
                    list.add(split[i]);
                }
                vp.setAdapter(new PagerAdapter() {
                    @Override
                    public int getCount() {
                        return list.size();
                    }
                    @Override
                    public boolean isViewFromObject(View view, Object object) {
                        return view==object;
                    }
                    @Override
                    public Object instantiateItem(ViewGroup container, int position) {
                        ImageView imageView = new ImageView(Xiangqing.this);
                        Glide.with(Xiangqing.this).load(list.get(position)).into(imageView);
                        container.addView(imageView);
                        imageView.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View view) {
                                Intent intent=new Intent(Xiangqing.this,PicActivity.class );
                                intent.putExtra("list",list);
                                startActivity(intent);
                            }
                        });
                        return imageView;
                    }
                    @Override
                    public void destroyItem(ViewGroup container, int position, Object object) {
                        container.removeView((View) object);
                    }
                });
                tv1.setText(xiangBean.getData().getTitle());
                tv2.setText("原价:"+xiangBean.getData().getPrice());
                tv2.setPaintFlags(Paint.STRIKE_THRU_TEXT_FLAG);
                tv3.setText("¥"+xiangBean.getData().getBargainPrice());
            }
        });
    }
    public void addCart(View view){
        Toast.makeText(this, "加入购物车", Toast.LENGTH_SHORT).show();
    }
}
XiangBean

package bwie.com.yueyue.xiangqing;

public class XiangBean {
    /**
     * msg :
     * seller : {"description":"我是商家17","icon":"http://120.27.23.105/images/icon.png","name":"商家17","productNums":999,"score":5,"sellerid":17}
     * code : 0
     * data : {"bargainPrice":111.99,"createtime":"2017-10-14T21:39:05","detailUrl":"https://item.m.jd.com/product/4719303.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t9004/210/1160833155/647627/ad6be059/59b4f4e1N9a2b1532.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7504/338/63721388/491286/f5957f53/598e95f1N7f2adb87.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7441/10/64242474/419246/adb30a7d/598e95fbNd989ba0a.jpg!q70.jpg","itemtype":1,"pid":1,"price":118,"pscid":1,"salenum":0,"sellerid":17,"subhead":"每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下","title":"北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g"}
     */
    private String msg;
    private SellerBean seller;
    private String code;
    private DataBean data;
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
    public SellerBean getSeller() {
        return seller;
    }
    public void setSeller(SellerBean seller) {
        this.seller = seller;
    }
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public DataBean getData() {
        return data;
    }
    public void setData(DataBean data) {
        this.data = data;
    }
    public static class SellerBean {
        /**
         * description : 我是商家17
         * icon : http://120.27.23.105/images/icon.png
         * name : 商家17
         * productNums : 999
         * score : 5.0
         * sellerid : 17
         */
        private String description;
        private String icon;
        private String name;
        private int productNums;
        private double score;
        private int sellerid;
        public String getDescription() {
            return description;
        }
        public void setDescription(String description) {
            this.description = description;
        }
        public String getIcon() {
            return icon;
        }
        public void setIcon(String icon) {
            this.icon = icon;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getProductNums() {
            return productNums;
        }
        public void setProductNums(int productNums) {
            this.productNums = productNums;
        }
        public double getScore() {
            return score;
        }
        public void setScore(double score) {
            this.score = score;
        }
        public int getSellerid() {
            return sellerid;
        }
        public void setSellerid(int sellerid) {
            this.sellerid = sellerid;
        }
    }
    public static class DataBean {
        /**
         * bargainPrice : 111.99
         * createtime : 2017-10-14T21:39:05
         * detailUrl : https://item.m.jd.com/product/4719303.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends
         * images : https://m.360buyimg.com/n0/jfs/t9004/210/1160833155/647627/ad6be059/59b4f4e1N9a2b1532.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7504/338/63721388/491286/f5957f53/598e95f1N7f2adb87.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7441/10/64242474/419246/adb30a7d/598e95fbNd989ba0a.jpg!q70.jpg
         * itemtype : 1
         * pid : 1
         * price : 118.0
         * pscid : 1
         * salenum : 0
         * sellerid : 17
         * subhead : 每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下
         * title : 北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g
         */
        private double bargainPrice;
        private String createtime;
        private String detailUrl;
        private String images;
        private int itemtype;
        private int pid;
        private double price;
        private int pscid;
        private int salenum;
        private int sellerid;
        private String subhead;
        private String title;
        public double getBargainPrice() {
            return bargainPrice;
        }
        public void setBargainPrice(double bargainPrice) {
            this.bargainPrice = bargainPrice;
        }
        public String getCreatetime() {
            return createtime;
        }
        public void setCreatetime(String createtime) {
            this.createtime = createtime;
        }
        public String getDetailUrl() {
            return detailUrl;
        }
        public void setDetailUrl(String detailUrl) {
            this.detailUrl = detailUrl;
        }
        public String getImages() {
            return images;
        }
        public void setImages(String images) {
            this.images = images;
        }
        public int getItemtype() {
            return itemtype;
        }
        public void setItemtype(int itemtype) {
            this.itemtype = itemtype;
        }
        public int getPid() {
            return pid;
        }
        public void setPid(int pid) {
            this.pid = pid;
        }
        public double getPrice() {
            return price;
        }
        public void setPrice(double price) {
            this.price = price;
        }
        public int getPscid() {
            return pscid;
        }
        public void setPscid(int pscid) {
            this.pscid = pscid;
        }
        public int getSalenum() {
            return salenum;
        }
        public void setSalenum(int salenum) {
            this.salenum = salenum;
        }
        public int getSellerid() {
            return sellerid;
        }
        public void setSellerid(int sellerid) {
            this.sellerid = sellerid;
        }
        public String getSubhead() {
            return subhead;
        }
        public void setSubhead(String subhead) {
            this.subhead = subhead;
        }
        public String getTitle() {
            return title;
        }
        public void setTitle(String title) {
            this.title = title;
        }
    }
}
PicActivity

package bwie.com.yueyue.xiangqing;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewGroup;
import com.bumptech.glide.Glide;
import java.util.ArrayList;
import bwie.com.yueyue.R;

public class PicActivity extends AppCompatActivity {
    private ViewPager viewPager;
    private ArrayList<String> imageUrls;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_pic);
        viewPager = (ViewPager) findViewById(R.id.viewpage);
        //获取导数据
        imageUrls = getIntent().getStringArrayListExtra("list");
        if (imageUrls != null){
            viewPager.setAdapter(new PagerAdapter() {
                @Override
                public Object instantiateItem(ViewGroup container, int position) {
                    ZoomImageView imageView = new ZoomImageView(PicActivity.this);
                    //加载图片显示
                    Glide.with(PicActivity.this).load(imageUrls.get(position)).into(imageView);
                    //添加
                    container.addView(imageView);
                    //返回
                    return imageView;
                }
                @Override
                public void destroyItem(ViewGroup container, int position,
                                        Object object) {
                    container.removeView((View) object);
                }
                @Override
                public boolean isViewFromObject(View arg0, Object arg1) {
                    return arg0 == arg1;
                }
                @Override
                public int getCount() {
                    return imageUrls.size();
                }
            });
        }
    }
}
IXiangqing

package bwie.com.yueyue.xiangqing;

public interface IXiangqing {
    void onSuccess(XiangBean xiangBean);
}
BannerImage

package bwie.com.yueyue.xiangqing;
import android.content.Context;
import android.widget.ImageView;
import com.bumptech.glide.Glide;
import com.youth.banner.loader.ImageLoader;

 public class BannerImage extends ImageLoader {
    @Override
    public void displayImage(Context context, Object path, ImageView imageView) {
        Glide.with(context).load(path).into(imageView);
    }
}
persenter
IXiangqingPersenter

package bwie.com.yueyue.xiangqing.persenter;
import bwie.com.yueyue.xiangqing.XiangBean;

public interface IXiangqingPersenter {
    void onSuccess(XiangBean xiangBean);
}
XiangqingPersenter

package bwie.com.yueyue.xiangqing.persenter;
import bwie.com.yueyue.xiangqing.IXiangqing;
import bwie.com.yueyue.xiangqing.XiangBean;
import bwie.com.yueyue.xiangqing.model.XiangqingModel;

public class XiangqingPersenter implements IXiangqingPersenter{
    private final XiangqingModel xiangqingModel;
    IXiangqing iXiangqing;
    public XiangqingPersenter(IXiangqing iXiangqing) {
        this.iXiangqing = iXiangqing;
        xiangqingModel = new XiangqingModel();
    }
    public void getData(int pid) {
        xiangqingModel.getData(pid,this);
    }
    @Override
    public void onSuccess(XiangBean xiangBean) {
        iXiangqing.onSuccess(xiangBean);
    }
}
model
XiangqingModel

package bwie.com.yueyue.xiangqing.model;
import com.google.gson.Gson;
import java.io.IOException;
import bwie.com.yueyue.util.OkHttp3Util_02;
import bwie.com.yueyue.xiangqing.XiangBean;
import bwie.com.yueyue.xiangqing.persenter.IXiangqingPersenter;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;

public class XiangqingModel {
    public void getData(int pid, final IXiangqingPersenter iXiangqingPersenter) {
        OkHttp3Util_02.doGet("https://www.zhaoapi.cn/product/getProductDetail?pid="+pid, new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
            }
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (response.isSuccessful()){
                    String string = response.body().string();
                    Gson gson = new Gson();
                    XiangBean xiangBean = gson.fromJson(string, XiangBean.class);
                    iXiangqingPersenter.onSuccess(xiangBean);
                }
            }
        });
    }
}
drawable 图片





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值