module层
package demo.bw.com.zkyd.di;
import android.util.Log;
import java.io.IOException;
import demo.bw.com.zkyd.utils.HttpUtils;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;
public class Imodule implements IContract.imodule {
@Override
public void responsemsgdata( int page, final callisten callisten ) {
String URL="http://www.zhaoapi.cn/product/searchProducts?keywords=笔记本&page="+page;
HttpUtils httpUtils = HttpUtils.getinstance();
httpUtils.getdata(URL, new Callback() {
@Override
public void onFailure( Call call, IOException e ) {
Log.d("xxx", e.getMessage());
}
@Override
public void onResponse( Call call, Response response ) throws IOException {
String s = response.body().string();
callisten.responsemsg(s);
}
});
}
}
Contract
package demo.bw.com.zkyd.di;
public interface IContract {
//iview
public interface iview{
//展示
void showview( String s );
}
//ipresenter
public interface ipresenter<iview>{
//关联
void attachview(iview iview);
//取消
void detachview(iview iview);
//方法
void requestdata( int page );
}
//imodule
public interface imodule{
//回调接口
interface callisten{
//响应
void responsemsg( String s );
}
//操作
void responsemsgdata( int page, callisten callisten );
}
}
presenter
package demo.bw.com.zkyd.di;
import java.lang.ref.WeakReference;
public class Ipresenter implements IContract.ipresenter<IContract.iview> {
private IContract.iview iview;
private Imodule imodule;
private WeakReference <IContract.iview> iviewWeakReference;
private WeakReference <IContract.imodule> imoduleWeakReference;
@Override
public void attachview( IContract.iview iview ) {
this.iview =iview;
//关联module
imodule = new Imodule();
//解决内存泄漏
iviewWeakReference = new WeakReference<>(iview);
imoduleWeakReference = new WeakReference<IContract.imodule>(imodule);
}
@Override
public void detachview( IContract.iview iview ) {
//解绑
iviewWeakReference.clear();
imoduleWeakReference.clear();
}
@Override
public void requestdata( int page ) {
imodule.responsemsgdata(page,new IContract.imodule.callisten() {
@Override
public void responsemsg( String s ) {
iview.showview(s);
}
});
}
}
HttpUtils
package demo.bw.com.zkyd.utils;
import android.util.Log;
import java.io.IOException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.HttpUrl;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class HttpUtils {
private static HttpUtils httpUtils;
private OkHttpClient okHttpClient;
//有参
private HttpUtils(){
if (okHttpClient==null){
okHttpClient =new OkHttpClient.Builder()
.addInterceptor(new MyINterceptor())
.build();
}
}
//拦截器
class MyINterceptor implements Interceptor{
@Override
public Response intercept( Chain chain ) throws IOException {
Request request = chain.request();
String method = request.method();
HttpUrl url = request.url();
//打印
Log.d("xxx", method + url);
Response response = chain.proceed(request);
return response;
}
}
//单例
public static HttpUtils getinstance(){
if (httpUtils==null){
synchronized (HttpUtils.class){
if (httpUtils==null){
httpUtils =new HttpUtils();
}
}
}
return httpUtils;
}
//post请求
public void postdata( String path, FormBody formBody, Callback callback){
Request request = new Request.Builder().method("POST", formBody).url(path).build();
Call call = okHttpClient.newCall(request);
call.enqueue(callback);
}
//get请求
public void getdata(String path2,Callback callback){
Request request = new Request.Builder().url(path2).build();
Call call = okHttpClient.newCall(request);
call.enqueue(callback);
}
}
MainActivity
package demo.bw.com.zkyd.ui;
import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.widget.EditText;
import com.google.gson.Gson;
import com.scwang.smartrefresh.layout.SmartRefreshLayout;
import com.scwang.smartrefresh.layout.api.DefaultRefreshFooterCreator;
import com.scwang.smartrefresh.layout.api.DefaultRefreshHeaderCreator;
import com.scwang.smartrefresh.layout.api.RefreshFooter;
import com.scwang.smartrefresh.layout.api.RefreshHeader;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.footer.ClassicsFooter;
import com.scwang.smartrefresh.layout.header.ClassicsHeader;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
import demo.bw.com.zkyd.R;
import demo.bw.com.zkyd.adapter.Adapterr;
import demo.bw.com.zkyd.bean.Goods;
import demo.bw.com.zkyd.di.IContract;
import demo.bw.com.zkyd.di.Ipresenter;
public class MainActivity extends AppCompatActivity implements IContract.iview {
@BindView(R.id.shuru)
EditText shuru;
@BindView(R.id.recycler_view)
RecyclerView recyclerView;
private Ipresenter ipresenter;
int page =1;
@Override
protected void onCreate( Bundle savedInstanceState ) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
//v与p层关联
ipresenter = new Ipresenter();
//第一步先调用attachview进行关联
ipresenter.attachview(this);
ipresenter.requestdata(page);
//设置样式
SmartRefreshLayout.setDefaultRefreshHeaderCreator(new DefaultRefreshHeaderCreator() {
@Override
public RefreshHeader createRefreshHeader( Context context, RefreshLayout layout) {
layout.setPrimaryColorsId(R.color.colorPrimary, android.R.color.white);//全局设置主题颜色
return new ClassicsHeader(context);//.setTimeFormat(new DynamicTimeFormat("更新于 %s"));//指定为经典Header,默认是 贝塞尔雷达Header
}
});
//设置全局的Footer构建器
SmartRefreshLayout.setDefaultRefreshFooterCreator(new DefaultRefreshFooterCreator() {
@Override
public RefreshFooter createRefreshFooter( Context context, RefreshLayout layout) {
//指定为经典Footer,默认是 BallPulseFooter
return new ClassicsFooter(context).setDrawableSize(20);
}
});
}
@Override
public void showview( final String s ) {
runOnUiThread(new Runnable() {
@Override
public void run() {
//gson解析
Gson gson = new Gson();
Goods goods = gson.fromJson(s, Goods.class);
List <Goods.DataBean> goodss = goods.getData();
//创建布局管理器
LinearLayoutManager manager = new LinearLayoutManager(MainActivity.this, LinearLayoutManager.VERTICAL, false);
//设置布局管理器
recyclerView.setLayoutManager(manager);
//创建适配器
Adapterr adapterr = new Adapterr(MainActivity.this, goodss);
//设置适配器
recyclerView.setAdapter(adapterr);
}
});
}
//解绑
@Override
protected void onDestroy() {
super.onDestroy();
ipresenter.detachview(this);
}
}
App
package demo.bw.com.zkyd.app;
import android.app.Application;
import com.facebook.drawee.backends.pipeline.Fresco;
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
Fresco.initialize(this);
}
}
Adapter
package demo.bw.com.zkyd.adapter;
import android.content.Context;
import android.net.Uri;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.facebook.drawee.view.SimpleDraweeView;
import java.util.List;
import demo.bw.com.zkyd.R;
import demo.bw.com.zkyd.bean.Goods;
public class Adapterr extends RecyclerView.Adapter<Adapterr.myholder> {
private Context context;
private List<Goods.DataBean> list;
public Adapterr( Context context, List <Goods.DataBean> list ) {
this.context = context;
this.list = list;
}
@NonNull
@Override
public myholder onCreateViewHolder( @NonNull ViewGroup viewGroup, int i ) {
View view = LayoutInflater.from(context).inflate(R.layout.myholder, null);
myholder myholder = new myholder(view);
return myholder;
}
@Override
public void onBindViewHolder( @NonNull myholder holder, int position ) {
holder.title1.setText(list.get(position).getTitle());
holder.price1.setText(list.get(position).getPrice()+"¥");
String[] split = list.get(position).getImages().split("\\|");
Uri uri = Uri.parse(split[0]);
holder.my_image_view.setImageURI(uri);
}
@Override
public int getItemCount() {
return list.size();
}
//创建对象
class myholder extends RecyclerView.ViewHolder{
private final TextView price1;
private final TextView title1;
private final SimpleDraweeView my_image_view;
public myholder( @NonNull View itemView ) {
super(itemView);
price1 = itemView.findViewById(R.id.price1);
title1 = itemView.findViewById(R.id.title1);
my_image_view = itemView.findViewById(R.id.my_image_view);
}
}
}
布局
activity
<?xml version="1.0" encoding="utf-8"?><EditText
android:id="@+id/shuru"
android:layout_width="match_parent"
android:layout_weight="1"
android:layout_height="0dp" />
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
myholder
?xml version=“1.0” encoding=“utf-8”?>
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/my_image_view"
android:layout_width="130dp"
android:layout_height="130dp"
fresco:placeholderImage="@drawable/ic_launcher_background"
/>
<TextView
android:id="@+id/title1"
android:text="hahahah"
android:textSize="20sp"
android:layout_toRightOf="@id/my_image_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/price1"
android:text="价格"
android:textColor="#f00"
android:textSize="20sp"
android:layout_toRightOf="@id/my_image_view"
android:layout_alignBottom="@id/my_image_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />