首先导依赖
//okhttp/拦截器
implementation ‘com.squareup.okhttp3:okhttp:3.11.0’
implementation ‘com.squareup.okhttp3:logging-interceptor:3.12.0’
//Gson解析
implementation ‘com.google.code.gson:gson:2.8.1’
//Glide图片加载
implementation ‘com.github.bumptech.glide:glide:4.8.0’
//recyclerView
implementation ‘com.android.support:recyclerview-v7:28.0.0’
//加网络权限
//接口
public interface IMainView<T> extends IBaseView {
void onSuccess(T t);
void onErr(String errMessage);
}
=============================
//BasePresenter
public class BasePresenter<V> {
private V view;
public V getView() {
return view;
}
public void setView(V view) {
this.view = view;
}
public void detachView(){
this.view=null;
}
}
================================================
//presenter
public class LoginPresenter extends BasePresenter<IMainView<LoginBean>> {
private final HttpUtils httpUtils;
public LoginPresenter(){
httpUtils = HttpUtils.getInstance();
}
public void loadDataFormNet(HashMap<String,String> hashMap){
httpUtils.postData(Contant.Login, LoginBean.class, hashMap, new HttpUtils.CallbackData<LoginBean>() {
@Override
public void onResponse(LoginBean loginBean) {
if (getView()!=null){
getView().onSuccess(loginBean);
}
}
@Override
public void onFail(String err) {
getView().onErr(err);
}
});
}
public void LoadDataFromNetRegister(HashMap<String,String> hashMap){
httpUtils.postData(Contant.Zhuce, LoginBean.class, hashMap, new HttpUtils.CallbackData<LoginBean>() {
@Override
public void onResponse(LoginBean loginBean) {
if (getView()!=null){
getView().onSuccess(loginBean);
}
}
@Override
public void onFail(String err) {
getView().onErr(err);
}
});
}
}
===============================
//网络请求
public class HttpUtils<T> {
private final OkHttpClient okHttpClient;
private HttpUtils(){
okHttpClient = new OkHttpClient.Builder()
.addNetworkInterceptor(new LogginIntecepter())
.readTimeout(5, TimeUnit.SECONDS)
.writeTimeout(5, TimeUnit.SECONDS)
.build();
}
public static HttpUtils getInstance(){
return HttpUtilsInstance.httpUtils;
}
private static class HttpUtilsInstance{
private static HttpUtils httpUtils = new HttpUtils();
}
private class LogginIntecepter implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
RequestBody body = request.body();
Log.e("myMessage","");
Headers headers = request.headers();
Response response = chain.proceed(request);
Headers headers1 = response.headers();
return response;
}
}
@SuppressLint("HandlerLeak")
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if(msg.what == 0){
T t = (T) msg.obj;
mCallback.onResponse(t);
} else {
String err = (String) msg.obj;
mCallback.onFail(err);
}
}
};
private CallbackData mCallback;
public void getData(String url, final Class<T> tClass, final CallbackData callbackData){
this.mCallback = callbackData;
Request request = new Request.Builder()
.url(url)
.get()
.build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Message message = handler.obtainMessage();
message.what = -1;
message.obj = e.getMessage();
handler.sendMessage(message);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String string = response.body().string();
Gson gson = new Gson();
T t = gson.fromJson(string, tClass);
Message message = handler.obtainMessage();
message.obj = t;
message.what = 0;
handler.sendMessage(message);
}
});
}
public void postData(String url, final Class<T> tClass, HashMap<String,String> hashMap, final CallbackData callbackData){
this.mCallback = callbackData;
FormBody.Builder builder = new FormBody.Builder();
for (Map.Entry<String, String> stringStringEntry : hashMap.entrySet()) {
String key = stringStringEntry.getKey();
String value = stringStringEntry.getValue();
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 = handler.obtainMessage();
message.what = -1;
message.obj = e.getMessage();
handler.sendMessage(message);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String string = response.body().string();
Gson gson = new Gson();
T t = gson.fromJson(string, tClass);
Message message = handler.obtainMessage();
message.obj = t;
message.what = 0;
handler.sendMessage(message);
}
});
}
public interface CallbackData<D>{
void onResponse(D d);
void onFail(String err);
}
}
==================================================
//App Contant
public class Contant {
public static final String URL="http://mobile.bwstudent.com/small/commodity/v1/commodityList";
public static final String Login="http://172.17.8.100/small/user/v1/login";
public static final String Zhuce="http://172.17.8.100/small/user/v1/register";
public static final String LunBo="http://mobile.bwstudent.com/small/commodity/v1/bannerShow";
}
====================================================
BaseActivity
public abstract class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(bindView());
initView();
initData();
}
public abstract void initView();
public abstract void initData();
public abstract int bindView();
}
===================================================================
BaseFragment
public abstract class BaseFragment extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(bindView(),container,false);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
initView();
initData();
}
public abstract int bindView();
protected abstract void initView();
protected abstract void initData();
}
======================================
public class Frag_home extends BaseFragment implements IMainView<HomeBean> {
private TextView catalog_home;
private TextView search_home;
private EditText edit_sou_home;
private RecyclerView sell_well_home;
private RecyclerView fashion_home;
private RecyclerView life_home;
private HomePresenter homePresenter;
private XBanner banner;
private SellAdapter sellAdapter;
private FashionAdapter fashionAdapter;
private LifeAdapter lifeAdapter;
private List<String> imgesUrl;
@Override
public int bindView() {
return R.layout.frag_home;
}
@Override
protected void initView() {
catalog_home = getActivity().findViewById(R.id.catalog_home);
search_home = getActivity().findViewById(R.id.search_home);
edit_sou_home = getActivity().findViewById(R.id.edit_sou_home);
banner = getActivity().findViewById(R.id.banner_home);
sell_well_home = getActivity().findViewById(R.id.sell_well_home);
fashion_home = getActivity().findViewById(R.id.fashion_home);
life_home = getActivity().findViewById(R.id.life_home);
@Override
protected void initData() {
homePresenter = new HomePresenter();
homePresenter.setView(this);
homePresenter.LoadHomeNet();
LinearLayoutManager sell_well_home1=new LinearLayoutManager(getActivity(),LinearLayoutManager.HORIZONTAL,false);
LinearLayoutManager fashion_home1=new LinearLayoutManager(getActivity());
GridLayoutManager life_home1=new GridLayoutManager(getActivity(),2);
sell_well_home.setLayoutManager(sell_well_home1);
fashion_home.setLayoutManager(fashion_home1);
life_home.setLayoutManager(life_home1);
sellAdapter = new SellAdapter(getActivity());
sell_well_home.setAdapter(sellAdapter);
sellAdapter.notifyDataSetChanged();
fashionAdapter = new FashionAdapter(getActivity());
fashion_home.setAdapter(fashionAdapter);
fashionAdapter.notifyDataSetChanged();
lifeAdapter = new LifeAdapter(getActivity());
life_home.setAdapter(lifeAdapter);
lifeAdapter.notifyDataSetChanged();
}
@Override
public void onSuccess(HomeBean homeBean) {
sellAdapter.setData(homeBean.getResult().getRxxp().getCommodityList());
fashionAdapter.setData(homeBean.getResult().getMlss().getCommodityList());
lifeAdapter.setData(homeBean.getResult().getPzsh().getCommodityList());
}
@Override
public void onErr(String errMessage) {
}
}
=====================================================
recyclerview适配器
public class SellAdapter extends RecyclerView.Adapter<SellAdapter.MyViewHolder> {
private Context context;
private ArrayList<HomeBean.ResultBean.RxxpBean.CommodityListBean> arr=new ArrayList<>();
public SellAdapter(Context context) {
this.context = context;
}
public void setData(List<HomeBean.ResultBean.RxxpBean.CommodityListBean> list){
if (list!=null){
arr.addAll(list);
notifyDataSetChanged();
}
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view=LayoutInflater.from(context).inflate(R.layout.sell_item,viewGroup,false);
MyViewHolder myViewHolder=new MyViewHolder(view);
return myViewHolder;
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, int i) {
if (arr.get(i)!=null){
final int commodityId = arr.get(i).getCommodityId();
Glide.with(context).load(arr.get(i).getMasterPic()).into(myViewHolder.img);
myViewHolder.name.setText(arr.get(i).getCommodityName());
myViewHolder.price.setText("¥"+arr.get(i).getPrice());
myViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, DetailsActivity.class);
intent.putExtra("id",commodityId);
context.startActivity(intent);
}
});
}
}
@Override
public int getItemCount() {
return arr.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder{
private final ImageView img;
private final TextView name;
private final TextView price;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
img = itemView.findViewById(R.id.sell_img);
name = itemView.findViewById(R.id.sell_name);
price = itemView.findViewById(R.id.sell_price);
}
}
}