mvp框架

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" />
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值