ZK2
来源:互联网 发布:淘宝怎样申请退货退款 编辑:程序博客网 时间:2024/06/06 01:46
依赖
compile 'com.github.bumptech.glide:glide:3.7.0' compile 'com.squareup.okhttp3:okhttp:3.9.0' compile 'com.google.code.gson:gson:2.8.2' compile 'com.jcodecraeer:xrecyclerview:1.3.2'
权限
<uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>布局
<?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="match_parent" android:orientation="vertical" > <Button android:id="@+id/qiehuan" android:layout_width="50dp" android:layout_height="50dp" android:layout_gravity="right" android:background="@drawable/lv_icon" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <EditText android:id="@+id/search" android:layout_weight="3" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:id="@+id/sousuo" android:layout_weight="1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="搜索" /> </LinearLayout> <com.jcodecraeer.xrecyclerview.XRecyclerView android:id="@+id/xrv" android:layout_width="match_parent" android:layout_height="wrap_content"> </com.jcodecraeer.xrecyclerview.XRecyclerView></LinearLayout>
---------------------------------------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/img" android:layout_width="100dp" android:layout_height="100dp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <TextView android:id="@+id/tv_title" android:layout_width="match_parent" android:layout_height="wrap_content" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <TextView android:id="@+id/tv_l" android:layout_weight="1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="原价9999" /> <TextView android:id="@+id/tv_r" android:layout_weight="1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="折扣价99.99" /> </LinearLayout> </LinearLayout></LinearLayout>
NewPresenter.java
package com.bwie.xumengshen1113.presenter;import com.bwie.xumengshen1113.OkHttpUtils;import com.bwie.xumengshen1113.bean.AllBean;import com.bwie.xumengshen1113.bean.IView;import com.bwie.xumengshen1113.callback.CallBack;import java.util.HashMap;import java.util.List;import java.util.Map;/** * * * @date:2017-11-13 * @time:09:26 */public class NewPresenter { private IView iView; public void attchView(IView iView){ this.iView=iView; } public void getData(String name, int page){ Map<String, String> map = new HashMap<>(); map.put("keywords",name); map.put("page",page+""); //调用Okhttp工具类 OkHttpUtils.getInstance().get("http://120.27.23.105/product/searchProducts", map, new CallBack() { //成功 @Override public void onSuccess(Object o) { AllBean oo = (AllBean) o; List<AllBean.DataBean> data = oo.getData(); iView.success(data); } //失败 @Override public void onFailed(String err) { iView.failed(err); } }, AllBean.class); } //内存泄露问题 public void detachView() { if (iView != null) { iView = null; } }}
OkHttpUtils.java
package com.bwie.xumengshen1113;import android.os.Handler;import android.util.Log;import com.bwie.xumengshen1113.callback.CallBack;import com.google.gson.Gson;import java.io.IOException;import java.util.Map;import okhttp3.Call;import okhttp3.Callback;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.Response;/** * * * @date:2017-11-13 * @time:09:10 */public class OkHttpUtils { private static volatile OkHttpUtils instance; private static Handler handler=new Handler(); private OkHttpUtils(){ } //单例模式 public static OkHttpUtils getInstance(){ if(instance==null){ synchronized (OkHttpUtils.class){ if(null==instance){ instance=new OkHttpUtils(); } } } return instance; } //请求网络方法 public void get(String url, Map<String,String> map, final CallBack callBack, final Class cls){ StringBuffer sb = new StringBuffer(); sb.append(url).append("?"); for(Map.Entry<String,String> entry:map.entrySet()){ sb.append(entry.getKey()).append("=").append(entry.getValue()).append("&"); } sb.deleteCharAt(sb.lastIndexOf("&")); OkHttpClient client = new OkHttpClient.Builder() .addInterceptor(new Logger()) .build(); Request request = new Request.Builder() .get() .url(sb.toString()) .build(); Log.d("TT", "sb: "+sb); Call call = client.newCall(request); call.enqueue(new Callback() { //请求失败 @Override public void onFailure(Call call, final IOException e) { handler.post(new Runnable() { @Override public void run() { callBack.onFailed(e.getMessage()); } }); } //请求成功 @Override public void onResponse(Call call, final Response response) throws IOException { final String string = response.body().string(); handler.post(new Runnable() { @Override public void run() { Gson gson = new Gson(); Object o = gson.fromJson(string, cls); Log.d("TT", "oooooooo: "+o); callBack.onSuccess(o); } }); } }); }}
MainActivity.java
package com.bwie.xumengshen1113;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.GridLayoutManager;import android.support.v7.widget.LinearLayoutManager;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;import com.bwie.xumengshen1113.adapter.RecyclerviewAdapter;import com.bwie.xumengshen1113.bean.AllBean;import com.bwie.xumengshen1113.bean.IView;import com.bwie.xumengshen1113.presenter.NewPresenter;import com.jcodecraeer.xrecyclerview.XRecyclerView;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity implements IView, View.OnClickListener { private Button qiehuan; private Button sousuo; private EditText search; private XRecyclerView xrv; ArrayList<AllBean.DataBean> lists = new ArrayList<>(); private RecyclerviewAdapter adapter; private NewPresenter presenter; private String name="手机"; private LinearLayoutManager linearLayoutManager; private GridLayoutManager gridLayoutManager; private int page=0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取控件 initView(); presenter = new NewPresenter(); //适配器 adapter = new RecyclerviewAdapter(this, lists); linearLayoutManager = new LinearLayoutManager(this); gridLayoutManager = new GridLayoutManager(this, 2); xrv.setLayoutManager(linearLayoutManager); //获取数据 presenter.getData(name,page); //刷新加载 xrv.setLoadingListener(new XRecyclerView.LoadingListener() { @Override public void onRefresh() { page=0; lists.clear(); presenter.getData(name,page); xrv.refreshComplete(); } @Override public void onLoadMore() { page++; presenter.getData(name,page); xrv.refreshComplete(); } }); //设置适配器 xrv.setAdapter(adapter); presenter.attchView(this); //点击事件 qiehuan.setOnClickListener(this); sousuo.setOnClickListener(this); } private void initView() { qiehuan = (Button) findViewById(R.id.qiehuan); sousuo = (Button) findViewById(R.id.sousuo); search = (EditText) findViewById(R.id.search); xrv = (XRecyclerView) findViewById(R.id.xrv); } @Override public void success(List<AllBean.DataBean> list) { if (null != list) { Log.d("TT", "success: "+list); lists.addAll(list); adapter.notifyDataSetChanged(); } } @Override public void failed(String err) { Toast.makeText(this,"请求失败",Toast.LENGTH_SHORT).show(); } //点击事件操作 @Override public void onClick(View view) { switch (view.getId()){ //切换视图显示 case R.id.qiehuan: if(linearLayoutManager!=null){ xrv.setLayoutManager(gridLayoutManager); linearLayoutManager=null; qiehuan.setBackgroundResource(R.drawable.grid_icon); }else if(gridLayoutManager!=null){ linearLayoutManager= new LinearLayoutManager(MainActivity.this); xrv.setLayoutManager(linearLayoutManager); qiehuan.setBackgroundResource(R.drawable.lv_icon); } break; //搜索按钮 case R.id.sousuo: String trim = search.getText().toString().trim(); name=trim; lists.clear(); presenter.getData(trim,page); adapter.notifyDataSetChanged(); break; default:break; } } //内存泄露问题 @Override protected void onDestroy() { super.onDestroy(); if (presenter != null) { presenter.detachView(); } }}
Logger.java
package com.bwie.xumengshen1113;import java.io.IOException;import okhttp3.HttpUrl;import okhttp3.Interceptor;import okhttp3.Request;import okhttp3.Response;/** * * * @date:2017-11-13 * @time:15:51 */public class Logger implements Interceptor { @Override public Response intercept(Chain chain) throws IOException { Request original = chain.request(); HttpUrl url=original.url().newBuilder() .addQueryParameter("source","android") .build(); //添加请求头 Request request = original.newBuilder() .url(url) .build(); return chain.proceed(request); }}RecyclerviewAdapter.java
package com.bwie.xumengshen1113.adapter;import android.content.Context;import android.support.v7.widget.RecyclerView;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.TextView;import com.bumptech.glide.Glide;import com.bwie.xumengshen1113.R;import com.bwie.xumengshen1113.bean.AllBean;import java.util.List;/** * * * @date:2017-11-13 * @time:09:47 */public class RecyclerviewAdapter extends RecyclerView.Adapter<RecyclerviewAdapter.ViewHolder>{ private Context context; private List<AllBean.DataBean> list; public RecyclerviewAdapter(Context context, List<AllBean.DataBean> list) { this.context = context; this.list = list; } //初始化ViewHolder @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = View.inflate(context, R.layout.listview, null); ViewHolder holder = new ViewHolder(view); return holder; } //绑定ViewHolder @Override public void onBindViewHolder(ViewHolder holder, int position) { String images = list.get(position).getImages(); String[] split = images.split("\\!"); Glide.with(context).load(split[0]).into(holder.img); holder.title.setText(list.get(position).getTitle()); } @Override public int getItemCount() { return list.size(); } //创建ViewHolder class ViewHolder extends RecyclerView.ViewHolder{ private final ImageView img; private final TextView title; public ViewHolder(View itemView) { super(itemView); img = itemView.findViewById(R.id.img); title = itemView.findViewById(R.id.tv_title); } }}
public interface IView { void success(List<AllBean.DataBean> list); void failed(String err);}
public interface CallBack { void onSuccess(Object o); void onFailed(String err);}
阅读全文
0 0
- ZK2
- dnsmasq 在和 zk1 和 zk2 这种配合的时候会出现无法解析的现象
- Singleton Pattern 和 Factory Pattern 的学习
- 知识学习——jQuery效果
- web中分页查询
- 处理 mvn -v 报Exception in thread "main" java.lang.UnsupportedClassVersionError错的问题
- vscode踩坑记
- ZK2
- kuangbin专题五 并查集 POJ1733 Parity game
- 黑龙江省对地观测与导航工程技术研究中心正式通过科技厅备案
- Java-集合 list对象进行指定位置插入、删除、迭代、遍历输出(具体习题讲解)
- RecyclerView的使用
- Doing Homework (状态dp)
- Win10升级后VMWare内的系统连不了网如何解决
- Python安装第三方模块
- 11月27号 侧边