依赖
compile 'com.google.code.gson:gson:2.6.2'
compile 'com.squareup.okhttp3:okhttp:3.3.0'
compile 'com.github.bumptech.glide:glide:3.7.0'
权限
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".view.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".view.GoodsListActivity" />
<activity android:name=".view.RegActivity" />
<activity android:name=".view.DeatilActivity"></activity>
</application>
//values文件夹
有一个dimens文件在下载的XListview里面粘贴
strings里面加入
<string name="xlistview_header_hint_normal">下拉刷新</string>
<string name="xlistview_header_hint_ready">松开刷新数据</string>
<string name="xlistview_header_hint_loading">正在加载...</string>
<string name="xlistview_header_last_time">上次更新时间:</string>
<string name="xlistview_footer_hint_normal">查看更多</string>
<string name="xlistview_footer_hint_ready">松开载入更多</string>
//下面是布局文件
//Xlistview的布局文件的网上去下载然后自己粘贴进来就行
activity_deatil
<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="com.daydayup.day10_zhoukao.view.DeatilActivity">
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent"></WebView>
</LinearLayout>
activity_main
<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"
android:orientation="vertical"
tools:context="com.daydayup.day10_zhoukao.view.MainActivity">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="登录"
android:textSize="25sp" />
<View
android:layout_width="match_parent"
android:layout_height="0.75dp"
android:background="#999999" />
<EditText
android:id="@+id/mobile"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="手机号" />
<EditText
android:id="@+id/pwd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="密码" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="登录" />
<Button
android:id="@+id/reg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="注册" />
</LinearLayout>
</LinearLayout>
//下面是一个Activity
activity_reg
<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"
android:orientation="vertical"
tools:context="com.daydayup.day10_zhoukao.view.MainActivity">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="注册"
android:textSize="25sp" />
<View
android:layout_width="match_parent"
android:layout_height="0.75dp"
android:background="#999999" />
<EditText
android:id="@+id/mobile"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="手机号" />
<EditText
android:id="@+id/pwd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="密码" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="horizontal">
<Button
android:id="@+id/reg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="注册" />
</LinearLayout>
</LinearLayout>
goods_list_layout
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:gravity="center_horizontal"
android:text="商品列表"
android:textSize="25sp" />
<ImageView
android:id="@+id/goodslist_change"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_gravity="right"
android:src="@drawable/grid_icon" />
</FrameLayout>
<View
android:layout_width="match_parent"
android:layout_height="0.75dp"
android:background="#999999" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
//这是自定义的view要换成你自己的
<com.example.administrator.erzhouzhoukaodemo2.view.custumview.MySearchView android:layout_width="0dp" android:id="@+id/mysearch" android:layout_height="40dp" android:layout_weight="1" ></com.example.administrator.erzhouzhoukaodemo2.view.custumview.MySearchView>
<TextView
android:id="@+id/sousuo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="搜索" />
</LinearLayout>
/ /这是自定义的view要换成你自己的
<com.example.administrator.erzhouzhoukaodemo2.view.custumview.XListView android:id="@+id/goodslist_listview" android:layout_width="match_parent" android:layout_height="wrap_content" android:visibility="visible" ></com.example.administrator.erzhouzhoukaodemo2.view.custumview.XListView>
<GridView
android:id="@+id/goodslist_gridview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:numColumns="2"
android:visibility="gone"></GridView>
</LinearLayout>
item_layout
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<ImageView
android:id="@+id/item_pic"
android:layout_width="60dp"
android:layout_height="60dp"
android:src="@mipmap/ic_launcher" />
<TextView
android:singleLine="true"
android:id="@+id/item_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="商品名" />
</LinearLayout>
item_layout_gridview
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageView
android:id="@+id/item_pic"
android:layout_width="60dp"
android:layout_height="60dp"
android:src="@mipmap/ic_launcher" />
<TextView
android:singleLine="true"
android:id="@+id/item_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="商品名" />
</LinearLayout>
layout_search
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/search_bg"
android:orientation="horizontal"
android:padding="8dp">
<ImageView
android:layout_width="@dimen/search_height"
android:layout_height="@dimen/search_height"
android:src="@drawable/a_4" />
<EditText
android:id="@+id/search_content"
android:layout_width="0dp"
android:layout_height="@dimen/search_height"
android:layout_weight="1"
android:background="@null" />
<ImageView
android:layout_width="@dimen/search_height"
android:layout_height="@dimen/search_height"
android:src="@drawable/root" />
</LinearLayout>
下面是代码
http文件夹
HttpUtils
public class HttpUtils {
private static final String TAG = "HttpUtils-----";
private static HttpUtils httpUtils;
private final int SUCCESS = 0;
private final int ERROR = 1;
private MyHandler myHandler = new MyHandler();
private OkLoadListener okLoadListener;
public static HttpUtils getHttpUtils() {
if (httpUtils == null) {
httpUtils = new HttpUtils();
}
return httpUtils;
}
//Handler处理线程
class MyHandler extends Handler {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case SUCCESS:
//成功
String json = (String) msg.obj;
okLoadListener.okLoadSuccess(json);
break;
case ERROR:
//失败
String error = (String) msg.obj;
okLoadListener.okLoadError(error);
break;
}
}
}
//get
public void okGet(String url) {
OkHttpClient okHttpClient = new OkHttpClient.Builder().addInterceptor(new MyIntercepter()).build();
Request request = new Request.Builder().url(url).build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Message message = myHandler.obtainMessage();
message.what = ERROR;
message.obj = e.getMessage();
myHandler.sendMessage(message);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
Message message = myHandler.obtainMessage();
message.what = SUCCESS;
message.obj = response.body().string();
myHandler.sendMessage(message);
}
});
}
public void setOkLoadListener(OkLoadListener okLoadListener) {
this.okLoadListener = okLoadListener;
}
//post
public void okPost(String url, Map<String, String> params) {
OkHttpClient okHttpClient = new OkHttpClient.Builder().addInterceptor(new MyIntercepter()).build();
FormBody.Builder builder = new FormBody.Builder();
Set<String> keySet = params.keySet();
for (String key :
keySet) {
String value = params.get(key);
builder.add(key, value);
}
FormBody formBody = builder.build();
Request request = new Request.Builder().url(url).post(formBody).build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Message message = myHandler.obtainMessage();
message.what = ERROR;
message.obj = e.getMessage();
myHandler.sendMessage(message);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
Message message = myHandler.obtainMessage();
message.what = SUCCESS;
message.obj = response.body().string();
myHandler.sendMessage(message);
}
});
}
//拦截器
class MyIntercepter implements Interceptor {
//intercept 拦截
@Override
public Response intercept(Chain chain) throws IOException {
//添加公共参数
//post 取出原来所有的参数,将之加到新的请求体里面。然后让请求去执行
Request request = chain.request();
//获取请求方法
String method = request.method();
if (method.equals("GET")) {//---------------------------GET 拦截
//取出url地址
String url = request.url().toString();
//拼接公共参数
boolean contains = url.contains("?");
if (contains) {
url = url + "&source=android";
} else {
url = url + "?source=android";
}
Request request1 = request.newBuilder().url(url).build();
Response response = chain.proceed(request1);
return response;
} else if (method.equals("POST")) {//---------------------POST 拦截
RequestBody body = request.body();//请求体
if (body instanceof FormBody) {
//创建新的请求体
FormBody.Builder newBuilder = new FormBody.Builder();
for (int i = 0; i < ((FormBody) body).size(); i++) {
String key = ((FormBody) body).name(i);
String value = ((FormBody) body).value(i);
newBuilder.add(key, value);
}
//添加公共参数
newBuilder.add("source", "android");
FormBody newBody = newBuilder.build();
//创建新的请求体
Request request1 = request.newBuilder().post(newBody).build();
//去请求
Response response = chain.proceed(request1);
return response;
}
}
return null;
}
}
//上传文件(图片)
public void upLoadImage(String url, String path) {//url 要上传的地址。path 要上传的文件路径
//媒体类型
MediaType mediaType = MediaType.parse("image/*");
//multipartbody
MultipartBody.Builder builder = new MultipartBody.Builder().setType(MultipartBody.FORM);
File file = new File(path);
MultipartBody multipartBody = builder.addFormDataPart("file", file.getName(), RequestBody.create(mediaType, file)).build();
OkHttpClient okHttpClient = new OkHttpClient();
Request request = new Request.Builder().url(url).post(multipartBody).build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.d(TAG, "上传失败0----: ");
}
@Override
public void onResponse(Call call, Response response) throws IOException {
Log.d(TAG, "上传成功: ");
}
});
}
}
HttpConfig
public class HttpConfig {
//登录接口
public static String login_url = "http://120.27.23.105/user/login";
// 注册
public static String reg_url = "http://120.27.23.105/user/reg";
// 商品列表接口
public static String goods_list_url = "http://120.27.23.105/product/searchProducts";
}
OkLoadListener
public interface OkLoadListener {
// 请求数据成功
void okLoadSuccess(String json);
//请求数据失败
void okLoadError(String error);
}
model文件夹
GoodsListListener
public interface GoodsListListener {
// 获取数据成功
void getDataSuccess(String json);
//获取数据失败
void getDataError(String error);
}
GoosListBean
public class GoosListBean {
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 {
private int 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 int getBargainPrice() {
return bargainPrice;
}
public void setBargainPrice(int 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;
}
}
}
IModel
public interface IModel {
// 登录
void login(String url, Map<String, String> params, LoginListener loginListener);
// 注册
void reg(String url, Map<String, String> params, RegListener regListener);
// 获取商品数据
void getGoodsListData(String url, Map<String, String> params, GoodsListListener goodsListListener);
void getGoodsListFresh(String url, Map<String, String> params, GoodsListListener goodsListListener);
void getGoodsListLoadMore(String url, Map<String, String> params, GoodsListListener goodsListListener);
// 搜索
void getGoodsListSouSuo(String url, Map<String, String> params, GoodsListListener goodsListListener);
}
LoginListener
public interface LoginListener {
void loginSuccess(String json);
void loginError(String error);
}
ModelImpl
public class ModelImpl implements IModel {
private static final String TAG = "ModelImpl----";
@Override
public void login(final String url, Map<String, String> params, final LoginListener loginListener) {
//
HttpUtils httpUtils = HttpUtils.getHttpUtils();
//调用post请求
httpUtils.okPost(url, params);
// 设置回调监听
httpUtils.setOkLoadListener(new OkLoadListener() {
@Override
public void okLoadSuccess(String json) {
Log.d(TAG, "okLoadSuccess: " + json);
//将数据传入p层
//解析json 如果code是0,成功,否则失败
Gson gson = new Gson();
UserBean userBean = gson.fromJson(json, UserBean.class);
if (userBean.getCode().equals("0")) {
loginListener.loginSuccess(json);
} else {
loginListener.loginError(json);
}
}
@Override
public void okLoadError(String error) {
loginListener.loginError(error);
}
});
}
//注册
@Override
public void reg(String url, Map<String, String> params, final RegListener regListener) {
HttpUtils httpUtils = HttpUtils.getHttpUtils();
httpUtils.okPost(url, params);//调用post请求
// 设置回调监听
httpUtils.setOkLoadListener(new OkLoadListener() {
@Override
public void okLoadSuccess(String json) {
Log.d(TAG, "okLoadSuccess: " + json);
//将数据传入p层
//解析json 如果code是0,成功,否则失败
Gson gson = new Gson();
RegBean userBean = gson.fromJson(json, RegBean.class);
if (userBean.getCode().equals("0")) {
regListener.regSuccess(json);
} else {
regListener.regError(json);
}
}
@Override
public void okLoadError(String error) {
regListener.regError(error);
}
});
}
// 获取商品数据
@Override
public void getGoodsListData(String url, Map<String, String> params, final GoodsListListener goodsListListener) {
HttpUtils httpUtils = HttpUtils.getHttpUtils();
httpUtils.okPost(url, params);//调用post请求
// 设置回调监听
httpUtils.setOkLoadListener(new OkLoadListener() {
@Override
public void okLoadSuccess(String json) {
Log.d(TAG, "okLoadSuccess: " + json);
//将数据传入p层
//解析json 如果code是0,成功,否则失败
Gson gson = new Gson();
GoosListBean goosListBean = gson.fromJson(json, GoosListBean.class);
if (goosListBean.getCode().equals("0")) {
goodsListListener.getDataSuccess(json);
} else {
goodsListListener.getDataError(json);
}
}
@Override
public void okLoadError(String error) {
goodsListListener.getDataError(error);
}
});
}
@Override
public void getGoodsListFresh(String url, Map<String, String> params, final GoodsListListener goodsListListener) {
HttpUtils httpUtils = HttpUtils.getHttpUtils();
httpUtils.okPost(url, params);//调用post请求
// 设置回调监听
httpUtils.setOkLoadListener(new OkLoadListener() {
@Override
public void okLoadSuccess(String json) {
Log.d(TAG, "okLoadSuccess: " + json);
//将数据传入p层
//解析json 如果code是0,成功,否则失败
Gson gson = new Gson();
GoosListBean goosListBean = gson.fromJson(json, GoosListBean.class);
if (goosListBean.getCode().equals("0")) {
goodsListListener.getDataSuccess(json);
} else {
goodsListListener.getDataError(json);
}
}
@Override
public void okLoadError(String error) {
goodsListListener.getDataError(error);
}
});
}
@Override
public void getGoodsListLoadMore(String url, Map<String, String> params, final GoodsListListener goodsListListener) {
HttpUtils httpUtils = HttpUtils.getHttpUtils();
httpUtils.okPost(url, params);//调用post请求
// 设置回调监听
httpUtils.setOkLoadListener(new OkLoadListener() {
@Override
public void okLoadSuccess(String json) {
Log.d(TAG, "okLoadSuccess: " + json);
//将数据传入p层
//解析json 如果code是0,成功,否则失败
Gson gson = new Gson();
GoosListBean goosListBean = gson.fromJson(json, GoosListBean.class);
if (goosListBean.getCode().equals("0")) {
goodsListListener.getDataSuccess(json);
} else {
goodsListListener.getDataError(json);
}
}
@Override
public void okLoadError(String error) {
goodsListListener.getDataError(error);
}
});
}
// 搜索
@Override
public void getGoodsListSouSuo(String url, Map<String, String> params, final GoodsListListener goodsListListener) {
HttpUtils httpUtils = HttpUtils.getHttpUtils();
httpUtils.okPost(url, params);//调用post请求
// 设置回调监听
httpUtils.setOkLoadListener(new OkLoadListener() {
@Override
public void okLoadSuccess(String json) {
Log.d(TAG, "okLoadSuccess: " + json);
//将数据传入p层
//解析json 如果code是0,成功,否则失败
Gson gson = new Gson();
GoosListBean goosListBean = gson.fromJson(json, GoosListBean.class);
if (goosListBean.getCode().equals("0")) {
goodsListListener.getDataSuccess(json);
} else {
goodsListListener.getDataError(json);
}
}
@Override
public void okLoadError(String error) {
goodsListListener.getDataError(error);
}
});
}
}
MyAdater
public class MyAdater extends BaseAdapter {
private Context context;
private List<GoosListBean.DataBean> data;
public MyAdater(Context context,List<GoosListBean.DataBean> data){
this.context=context;
this.data=data;
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
MyViewHolder myViewHolder=null;
if (convertView==null){
convertView=View.inflate(context, R.layout.item_layout,null);
ImageView imageView=convertView.findViewById(R.id.item_pic);
TextView textView = convertView.findViewById(R.id.item_title);
myViewHolder=new MyViewHolder(imageView,textView);
convertView.setTag(myViewHolder);
}else {
myViewHolder= (MyViewHolder) convertView.getTag();
}
//赋值
String images = data.get(position).getImages();
String pic_url= images.split("\\|")[0];
Glide.with(context).load(pic_url).into(myViewHolder.getImageView());
myViewHolder.getTextView().setText(data.get(position).getTitle());
return convertView;
}
class MyViewHolder{
private ImageView imageView;
private TextView textView;
public MyViewHolder(ImageView imageView, TextView textView) {
this.imageView = imageView;
this.textView = textView;
}
public ImageView getImageView() {
return imageView;
}
public void setImageView(ImageView imageView) {
this.imageView = imageView;
}
public TextView getTextView() {
return textView;
}
public void setTextView(TextView textView) {
this.textView = textView;
}
}
}
MyAdater2
public class MyAdater2 extends BaseAdapter {
private Context context;
private List<GoosListBean.DataBean> data;
public MyAdater2(Context context, List<GoosListBean.DataBean> data){
this.context=context;
this.data=data;
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
MyViewHolder myViewHolder=null;
if (convertView==null){
convertView=View.inflate(context, R.layout.item_layout_gridview,null);
ImageView imageView=convertView.findViewById(R.id.item_pic);
TextView textView = convertView.findViewById(R.id.item_title);
myViewHolder=new MyViewHolder(imageView,textView);
convertView.setTag(myViewHolder);
}else {
myViewHolder= (MyViewHolder) convertView.getTag();
}
//赋值
String images = data.get(position).getImages();
String pic_url= images.split("\\|")[0];
Glide.with(context).load(pic_url).into(myViewHolder.getImageView());
myViewHolder.getTextView().setText(data.get(position).getTitle());
return convertView;
}
class MyViewHolder{
private ImageView imageView;
private TextView textView;
public MyViewHolder(ImageView imageView, TextView textView) {
this.imageView = imageView;
this.textView = textView;
}
public ImageView getImageView() {
return imageView;
}
public void setImageView(ImageView imageView) {
this.imageView = imageView;
}
public TextView getTextView() {
return textView;
}
public void setTextView(TextView textView) {
this.textView = textView;
}
}
}
RegBean
public class RegBean {
/**
* 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;
}
}
RegListener
public interface RegListener {
void regSuccess(String json);
void regError(String error);
}
UserBean
public class UserBean {
private String msg;
private String code;
private 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 DataBean getData() {
return data;
}
public void setData(DataBean data) {
this.data = data;
}
public static class DataBean {
private Object age;
private String appkey;
private String appsecret;
private String createtime;
private Object email;
private Object fans;
private Object follow;
private Object gender;
private Object icon;
private Object latitude;
private Object longitude;
private String mobile;
private Object money;
private Object nickname;
private String password;
private Object praiseNum;
private String token;
private int uid;
private Object userId;
private String username;
public Object getAge() {
return age;
}
public void setAge(Object age) {
this.age = age;
}
public String getAppkey() {
return appkey;
}
public void setAppkey(String appkey) {
this.appkey = appkey;
}
public String getAppsecret() {
return appsecret;
}
public void setAppsecret(String appsecret) {
this.appsecret = appsecret;
}
public String getCreatetime() {
return createtime;
}
public void setCreatetime(String createtime) {
this.createtime = createtime;
}
public Object getEmail() {
return email;
}
public void setEmail(Object email) {
this.email = email;
}
public Object getFans() {
return fans;
}
public void setFans(Object fans) {
this.fans = fans;
}
public Object getFollow() {
return follow;
}
public void setFollow(Object follow) {
this.follow = follow;
}
public Object getGender() {
return gender;
}
public void setGender(Object gender) {
this.gender = gender;
}
public Object getIcon() {
return icon;
}
public void setIcon(Object icon) {
this.icon = icon;
}
public Object getLatitude() {
return latitude;
}
public void setLatitude(Object latitude) {
this.latitude = latitude;
}
public Object getLongitude() {
return longitude;
}
public void setLongitude(Object longitude) {
this.longitude = longitude;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public Object getMoney() {
return money;
}
public void setMoney(Object money) {
this.money = money;
}
public Object getNickname() {
return nickname;
}
public void setNickname(Object nickname) {
this.nickname = nickname;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Object getPraiseNum() {
return praiseNum;
}
public void setPraiseNum(Object praiseNum) {
this.praiseNum = praiseNum;
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public Object getUserId() {
return userId;
}
public void setUserId(Object userId) {
this.userId = userId;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
}
presenter文件夹
Ipresenter
public interface Ipresenter {
// 登录
void loginPresenter(IModel iModel, IMainView iMainView);
// 注册
void regPresenter(IModel iModel, IRegView iRegView);
// 显示数据
void showGoodsListToView(IModel iModel, IGoodsListView iGoodsListView);
void showGoodsListToViewFresh(IModel iModel, IGoodsListView iGoodsListView);
void showGoodsListToViewLoadMore(IModel iModel, IGoodsListView iGoodsListView);
// 搜索
void showGoodsListToViewSouSuo(IModel iModel, IGoodsListView iGoodsListView);
}
Presenter
public class Presenter implements Ipresenter {
private static final String TAG = "Presenter-----";
//登录
@Override
public void loginPresenter(IModel iModel, final IMainView iMainView) {
//调用m请求数据
Map<String, String> map = new HashMap<>();
map.put("mobile", iMainView.getMobile());
map.put("password", iMainView.getPassword());
iModel.login(HttpConfig.login_url, map, new LoginListener() {
//根据回调结果,决定view的显示效果
@Override
public void loginSuccess(String json) {
iMainView.loginSuccess();
}
@Override
public void loginError(String error) {
iMainView.loginError();
}
});
}
//注册
@Override
public void regPresenter(IModel iModel, final IRegView iRegView) {
//调用m请求数据
Map<String, String> map = new HashMap<>();
map.put("mobile", iRegView.getMobile());
map.put("password", iRegView.getPassword());
iModel.reg(HttpConfig.reg_url, map, new RegListener() {
@Override
public void regSuccess(String json) {
iRegView.regSuccess();
}
@Override
public void regError(String error) {
iRegView.regError();
}
});
}
// 显示数据
@Override
public void showGoodsListToView(IModel iModel, final IGoodsListView iGoodsListView) {
Map<String, String> map = new HashMap<>();
map.put("keywords", "笔记本");
map.put("page", "1");
iModel.getGoodsListData(HttpConfig.goods_list_url, map, new GoodsListListener() {
@Override
public void getDataSuccess(String json) {
Gson gson = new Gson();
GoosListBean goosListBean = gson.fromJson(json, GoosListBean.class);
iGoodsListView.showGoodsList(goosListBean.getData());
}
@Override
public void getDataError(String error) {
Log.d(TAG, "失败---");
}
});
}
@Override
public void showGoodsListToViewFresh(IModel iModel, final IGoodsListView iGoodsListView) {
Map<String, String> map = new HashMap<>();
map.put("keywords", "笔记本");
map.put("page", "1");
iModel.getGoodsListData(HttpConfig.goods_list_url, map, new GoodsListListener() {
@Override
public void getDataSuccess(String json) {
Gson gson = new Gson();
GoosListBean goosListBean = gson.fromJson(json, GoosListBean.class);
iGoodsListView.showGoodsListFresh(goosListBean.getData());
}
@Override
public void getDataError(String error) {
Log.d(TAG, "失败---");
}
});
}
@Override
public void showGoodsListToViewLoadMore(IModel iModel, final IGoodsListView iGoodsListView) {
Map<String, String> map = new HashMap<>();
map.put("keywords", "笔记本");
map.put("page", iGoodsListView.getPage());
iModel.getGoodsListData(HttpConfig.goods_list_url, map, new GoodsListListener() {
@Override
public void getDataSuccess(String json) {
Gson gson = new Gson();
GoosListBean goosListBean = gson.fromJson(json, GoosListBean.class);
iGoodsListView.showGoodsListLoadMore(goosListBean.getData());
}
@Override
public void getDataError(String error) {
Log.d(TAG, "失败---");
}
});
}
//搜索
@Override
public void showGoodsListToViewSouSuo(IModel iModel, final IGoodsListView iGoodsListView) {
Map<String, String> map = new HashMap<>();
map.put("keywords", iGoodsListView.getContent());
map.put("page", "1");
iModel.getGoodsListData(HttpConfig.goods_list_url, map, new GoodsListListener() {
@Override
public void getDataSuccess(String json) {
Gson gson = new Gson();
GoosListBean goosListBean = gson.fromJson(json, GoosListBean.class);
iGoodsListView.showGoodsListSousuo(goosListBean.getData());
}
@Override
public void getDataError(String error) {
Log.d(TAG, "失败---");
}
});
}
}
view文件夹
子文件夹custumview里面有3个XListView文件和
MySearchView
public class MySearchView extends LinearLayout {
private EditText search_content;
//1.
//直接new的时候
public MySearchView(Context context) {
this(context, null);
}
public MySearchView(Context context, @Nullable AttributeSet attrs) {
this(context, attrs, 0);
}
//在布局文件里面时候控件的时候
public MySearchView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
//初始化
View view = View.inflate(context, R.layout.layout_search, this);
search_content = view.findViewById(R.id.search_content);
// search_content.setOnClickListener(new OnClickListener() {
// @Override
// public void onClick(View v) {
// search_content.setFocusable(true);
// }
// });
}
//获取输入的内容
public String getContent() {
return search_content.getText().toString();
}
}
然后就是子文件夹外的代码
DeatilActivity
public class DeatilActivity extends AppCompatActivity {
private WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_deatil);
initViews();
initDatas();
}
private void initDatas() {
Intent intent = getIntent();
String url = intent.getStringExtra("url");
webView.loadUrl(url);
}
private void initViews() {
webView = findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient());
webView.setWebChromeClient(new WebChromeClient());
}
}
GoodsListActivity
public class GoodsListActivity extends Activity implements View.OnClickListener, IGoodsListView {
private XListView listView;
private GridView gridView;
private static final String TAG = "GoodsListActivity---";
private boolean flag = true;
private ImageView change;
private TextView sousuo;
private MySearchView mySearchView;
private int page = 1;
private List<GoosListBean.DataBean> data;
private MyAdater myAdater;
private MyAdater2 myAdater2;
private Presenter presenter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.goods_list_layout);
//初始化界面
initViews();
//请求书
presenter = new Presenter();
presenter.showGoodsListToView(new ModelImpl(), this);
}
private void initViews() {
sousuo = findViewById(R.id.sousuo);
sousuo.setOnClickListener(this);
mySearchView = findViewById(R.id.mysearch);
change = findViewById(R.id.goodslist_change);
change.setOnClickListener(this);
listView = findViewById(R.id.goodslist_listview);
gridView = findViewById(R.id.goodslist_gridview);
//设置
listView.setPullLoadEnable(true);
listView.setPullRefreshEnable(true);
listView.setXListViewListener(new XListView.IXListViewListener() {
@Override
public void onRefresh() {
page = 1;
presenter.showGoodsListToViewFresh(new ModelImpl(), GoodsListActivity.this);
}
@Override
public void onLoadMore() {
page++;
presenter.showGoodsListToViewLoadMore(new ModelImpl(), GoodsListActivity.this);
}
});
//
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String detailUrl = GoodsListActivity.this.data.get(position-1).getDetailUrl();
Intent intent = new Intent(GoodsListActivity.this, DeatilActivity.class);
intent.putExtra("url",detailUrl);
startActivity(intent);
}
});
}
//点击事件
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.goodslist_change:
if (flag) {
change.setImageResource(R.drawable.lv_icon);
gridView.setVisibility(View.VISIBLE);
listView.setVisibility(View.GONE);
} else {
change.setImageResource(R.drawable.grid_icon);
gridView.setVisibility(View.GONE);
listView.setVisibility(View.VISIBLE);
}
flag = !flag;
break;
case R.id.sousuo:
presenter.showGoodsListToViewSouSuo(new ModelImpl(), GoodsListActivity.this);
break;
}
}
//展示商品列表的方法
@Override
public void showGoodsList(List<GoosListBean.DataBean> data) {
this.data = data;
Log.d(TAG, "showGoodsList: " + data);
//展示
myAdater = new MyAdater(GoodsListActivity.this, this.data);
myAdater2 = new MyAdater2(GoodsListActivity.this, this.data);
listView.setAdapter(myAdater);
gridView.setAdapter(myAdater2);
}
//刷新
@Override
public void showGoodsListFresh(List<GoosListBean.DataBean> data) {
this.data = data;
myAdater.notifyDataSetChanged();
myAdater2.notifyDataSetChanged();
listView.stopRefresh();
}
//加载
@Override
public void showGoodsListLoadMore(List<GoosListBean.DataBean> data) {
this.data.addAll(data);
//展示
myAdater = new MyAdater(GoodsListActivity.this, this.data);
myAdater2 = new MyAdater2(GoodsListActivity.this, this.data);
listView.setAdapter(myAdater);
gridView.setAdapter(myAdater2);
listView.stopLoadMore();
}
@Override
public String getContent() {
return mySearchView.getContent();
}
//页数
@Override
public String getPage() {
return page + "";
}
@Override
public void showGoodsListSousuo(List<GoosListBean.DataBean> data) {
this.data=data;
myAdater = new MyAdater(GoodsListActivity.this, this.data);
myAdater2 = new MyAdater2(GoodsListActivity.this, this.data);
listView.setAdapter(myAdater);
gridView.setAdapter(myAdater2);
}
}
IGoodsListView
public interface IGoodsListView {
//展示商品列表的方法
void showGoodsList(List<GoosListBean.DataBean> data);
// 刷新
void showGoodsListFresh(List<GoosListBean.DataBean> data);
// 加载
void showGoodsListLoadMore(List<GoosListBean.DataBean> data);
String getContent();
String getPage();
void showGoodsListSousuo(List<GoosListBean.DataBean> data);
}
IMainView
public interface IMainView {
//获手机号
String getMobile();
//获取密码
String getPassword();
//登录成功
void loginSuccess();
//登录失败
void loginError();
}
IRegView
public interface IRegView {
//获手机号
String getMobile();
//获取密码
String getPassword();
//注册成功
void regSuccess();
//注册失败
void regError();
}
MainActivity
public class MainActivity extends AppCompatActivity implements IMainView, View.OnClickListener {
private EditText mobile;
private EditText password;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化界面
initViews();
}
private void initViews() {
mobile = findViewById(R.id.mobile);
password = findViewById(R.id.pwd);
Button login = findViewById(R.id.login);
Button reg = findViewById(R.id.reg);
login.setOnClickListener(this);
reg.setOnClickListener(this);
}
//手机号
@Override
public String getMobile() {
return mobile.getText().toString();
}
@Override
public String getPassword() {
return password.getText().toString();
}
@Override
public void loginSuccess() {
Toast.makeText(MainActivity.this, "成功---", Toast.LENGTH_SHORT).show();
startActivity(new Intent(MainActivity.this,GoodsListActivity.class));
}
@Override
public void loginError() {
Toast.makeText(MainActivity.this, "失败---请注册", Toast.LENGTH_SHORT).show();
}
//点击事件
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.login:
Presenter presenter = new Presenter();
presenter.loginPresenter(new ModelImpl(),this);
break;
case R.id.reg:
startActivity(new Intent(MainActivity.this,RegActivity.class));
break;
}
}
}
Activity
RegActivity
public class RegActivity extends AppCompatActivity implements View.OnClickListener, IRegView {
private EditText mobile;
private EditText password;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_reg);
//初始化界面
initViews();
}
private void initViews() {
mobile = findViewById(R.id.mobile);
password = findViewById(R.id.pwd);
Button reg = findViewById(R.id.reg);
reg.setOnClickListener(this);
}
//点击事件
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.reg:
Presenter presenter = new Presenter();
presenter.regPresenter(new ModelImpl(), this);
break;
}
}
//获取手机号
@Override
public String getMobile() {
return mobile.getText().toString();
}
//密码
@Override
public String getPassword() {
return password.getText().toString();
}
//注册成功
@Override
public void regSuccess() {
Toast.makeText(RegActivity.this, "注册成功---", Toast.LENGTH_SHORT).show();
startActivity(new Intent(RegActivity.this, GoodsListActivity.class));
}
//注册失败
@Override
public void regError() {
Toast.makeText(RegActivity.this, "注册失败---", Toast.LENGTH_SHORT).show();
}
}