依赖
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 ZhuceBeanpackage 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; } }ZhuceModelpackage 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 IZhucePersenterpackage bwie.com.yueyue.register.persenter; import bwie.com.yueyue.register.model.ZhuceBean; public interface IZhucePersenter { void onSuccess(ZhuceBean zhuceBean); }ZhucePersenterpackage 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
IMain2Activitypackage 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); }Main2Activitypackage 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 SousuoAdapterpackage 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; } }Sousuo2Adapterpackage 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; } }OnItemClickListenerpackage bwie.com.yueyue.Search; public interface OnItemClickListener { void onClick(int position); }bean
ShopBeanpackage 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
SousuoModelpackage 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
ISousuoPersenterpackage bwie.com.yueyue.Search.persenter; import bwie.com.yueyue.Search.bean.ShopBean; public interface ISousuoPersenter { void onSuccess(ShopBean shopBean); }SousuoPersenterpackage 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
ISousuoActivitypackage 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); }SousuoActivitypackage 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_02package 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
ZoomlmageViewpackage 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 &¤tScale>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; } }Xiangqingpackage 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(); } }XiangBeanpackage 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; } } }PicActivitypackage 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(); } }); } } }IXiangqingpackage bwie.com.yueyue.xiangqing; public interface IXiangqing { void onSuccess(XiangBean xiangBean); }BannerImagepackage 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
IXiangqingPersenterpackage bwie.com.yueyue.xiangqing.persenter; import bwie.com.yueyue.xiangqing.XiangBean; public interface IXiangqingPersenter { void onSuccess(XiangBean xiangBean); }XiangqingPersenterpackage 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
XiangqingModelpackage 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 图片