实战MVP请求数据OKHttp封装RecyclerView上拉刷新下拉加载

本文介绍了一个简单的安卓应用中搜索功能的实现过程,包括UI布局设计、数据获取及展示等关键步骤。通过Presenter模式分离视图与数据处理,利用RecyclerView进行商品列表的展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//布局

<?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"
    android:orientation="vertical"
    tools:context="com.bwie.week2_demo.MainActivity">


    <LinearLayout
        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:text="搜索商品"
            android:textSize="30sp"
            android:layout_marginLeft="130dp"
            android:layout_marginTop="10dp"
            />


        <ImageView
            android:id="@+id/img1"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:src="@drawable/grid_icon"
            android:layout_marginLeft="80dp"
            android:layout_marginBottom="10dp"
            android:layout_marginTop="5dp"/>


    </LinearLayout>


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">


        <EditText
            android:id="@+id/et_name1"
            android:layout_width="240dp"
            android:layout_height="wrap_content"
            android:hint="请输入关键字"
            android:layout_marginLeft="25dp"
            android:layout_marginTop="10dp"/>


        <Button
            android:id="@+id/btn1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="搜索"
            android:layout_marginTop="10dp"
            android:layout_marginLeft="15dp"
            android:layout_marginBottom="10dp"/>


    </LinearLayout>


    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerview1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></android.support.v7.widget.RecyclerView>


</LinearLayout>


//presenter

package com.bwie.week2_demo.Presenter;


import android.content.Context;


import com.bwie.week2_demo.Bean.Bean;
import com.bwie.week2_demo.Model.MyModel;
import com.bwie.week2_demo.View.Iview;
import com.bwie.week2_demo.utils.OnUiCallback;
import com.google.gson.Gson;


import java.io.IOException;


import okhttp3.Call;


/**
 * Created by 小醜 on 2017/12/9.
 */


public class Presenter {
    Context context; Iview iView;
    MyModel myModel;
    public Presenter(Context context, Iview iView) {
        this.context=context;
        this.iView=iView;
        this.myModel=new MyModel();


    }
    public void get(){
      myModel.initData(new OnUiCallback() {
          @Override
          public void onFailed(Call call, IOException e) {


          }


          @Override
          public void onSuccess(String result)
          {
              Gson gson=new Gson();
            Bean bean=  gson.fromJson(result, Bean.class);
              iView.getData(bean);
          }
      });
    }
}



//utils包 ok封装 导进


//view包  Iview类

package com.bwie.week2_demo.View;


import com.bwie.week2_demo.Bean.Bean;


/**
 * Created by 小醜 on 2017/12/9.
 */


public interface Iview {
    public void getData(Bean bean);
}


//model包  

// Imodel类

package com.bwie.week2_demo.Model;


import okhttp3.Callback;


/**
 * Created by 小醜 on 2017/12/9.
 */


public interface IModel {


    public void initData(Callback callback);
}


//MyModel

package com.bwie.week2_demo.Model;


import com.bwie.week2_demo.utils.OkHttp3Utils;


import okhttp3.Callback;


/**
 * Created by 小醜 on 2017/12/9.
 */


public class MyModel implements IModel {
    @Override
    public void initData(Callback callback) {
        OkHttp3Utils.doGet("http://120.27.23.105/product/searchProducts?source=android&keywords=笔记本&page=1",callback);
    }
}


//bean 类 封装

//MainActivity类

package com.bwie.week2_demo;


import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.ImageView;


import com.bwie.week2_demo.Bean.Bean;
import com.bwie.week2_demo.Presenter.Presenter;
import com.bwie.week2_demo.View.Iview;


import java.util.List;


public class MainActivity extends AppCompatActivity implements Iview{


    ImageView img1;
    RecyclerView recyclerview;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        recyclerview= (RecyclerView) findViewById(R.id.recyclerview1);
        isitJump();
        Presenter presenter=new Presenter(this,this);
        presenter.get();


    }


    private void isitJump() {
        img1 = (ImageView) findViewById(R.id.img1);
        img1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(MainActivity.this,Main2Activity.class);
                startActivity(intent);
            }
        });
    }




    @Override
    public void getData(Bean bean) {
        List<Bean.DataBean>  list=bean.getData();
      MyAdapter myAdapter=new MyAdapter(this,list);
        recyclerview.setAdapter(myAdapter);
    }
}


//MyAdapter 类

package com.bwie.week2_demo;


import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.ImageView;


import com.bwie.week2_demo.Bean.Bean;


import java.util.List;


/**
 * Created by 小醜 on 2017/12/9.
 */


public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    Context context; List<Bean.DataBean> list;
    public MyAdapter(Context context, List<Bean.DataBean> list) {
    this.context=context;
        this.list=list;


    }


    @Override
    public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {




        return null;
    }


    @Override
    public void onBindViewHolder(MyAdapter.ViewHolder holder, int position) {


    }


    @Override
    public int getItemCount() {
        return list==null?0:list.size();
    }


    public class ViewHolder extends RecyclerView.ViewHolder {
        ImageView img1;
        EditText et_name1;
        public ViewHolder(View itemView) {
            super(itemView);
            img1 = itemView.findViewById(R.id.img1);
            et_name1 = itemView.findViewById(R.id.et_name1);


        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值