Android完整的前后端交互參考案例
Android 前端獲取數(shù)據(jù)并顯示
API 連接獲取(~~Api.java)
文件創(chuàng)建
新建Kotlin class/file 中的 Interface 文件。
文件內(nèi)容
public interface CleaningDisinfectionApi { //綜合查詢清洗消毒列表 @POST("formatdisinfection/getPage") Observable<CleaningDisinfectionData.CleaningDisinfectionInfoList> getCleaningDisinfection(@Header("Range") String page, @Body CleaningDisinfectionData.SearchCleaningDisinfectionRequest searchCleaningDisinfectionRequest); }
POST
內(nèi)容格式固定,內(nèi)容根據(jù)結(jié)構(gòu)文檔請(qǐng)求不同數(shù)據(jù)組
@POST("formatdisinfection/getPage")
其格式固定,POST后內(nèi)容代表根據(jù)接口文檔進(jìn)行填寫(xiě)。
Observable
Observable<CleaningDisinfectionData.CleaningDisinfectionInfoList> getCleaningDisinfection(@Header("Range") String page, @Body CleaningDisinfectionData.SearchCleaningDisinfectionRequest searchCleaningDisinfectionRequest);
CleaningDisinfectionData.CleaningDisinfectionInfoList
返回?cái)?shù)據(jù)列表,數(shù)據(jù)內(nèi)容根據(jù)需求自行設(shè)計(jì)
getCleaningDisinfection(@Header("Range") String page, @Body CleaningDisinfectionData.SearchCleaningDisinfectionRequest searchCleaningDisinfectionRequest)
函數(shù)格式確定,
Header為指定的內(nèi)容,
Body是數(shù)據(jù)請(qǐng)求文件(~~~~~~Data.~~~~~~Request)對(duì)象,在此請(qǐng)求數(shù)據(jù)中,一般請(qǐng)求整個(gè)完整的對(duì)象數(shù)據(jù)組。
設(shè)置數(shù)據(jù)是根據(jù)不同的需求顯示不同的數(shù)據(jù)。
數(shù)據(jù)請(qǐng)求以及設(shè)定(~~Data.java)
此部分主要完成利用Api接口,完成完整數(shù)據(jù)組的獲取,以及根據(jù)不同需求設(shè)定不同的返回?cái)?shù)據(jù)列表。
數(shù)據(jù)請(qǐng)求函數(shù)(public static class ~~~Request)
此函數(shù)請(qǐng)求完整的數(shù)據(jù)組。
即*根據(jù)接口文檔參數(shù)內(nèi)容,定義所有的成員變量,并于文檔參數(shù)一一對(duì)應(yīng)*,并定義其get和set方法。
private String date;//消毒日期 private String amount;//餐具數(shù)量 private String coaCode;//企業(yè)許可證號(hào) private String coaName;//許可證企業(yè)名稱 private String entCreditCode;//企業(yè)社會(huì)信用代碼 private String enterpriseName;//企業(yè)名稱 private String name;//餐具名稱 private String way;//消毒方式 private String person;//操作人姓名 private String remark;//備注 private String start;//開(kāi)始日期 private String end;//結(jié)束日期 private String addTime; private String operator; private String operatorIp; private String operatorTime; private int id; private int start1;//開(kāi)始時(shí)間 小時(shí) private int start2;//開(kāi)始時(shí)間 分 private int end1;//結(jié)束時(shí)間 小時(shí) private int end2;//結(jié)束時(shí)間 秒 private int area;//企業(yè)所在區(qū)域 private int caId;//從業(yè)人員ID
數(shù)據(jù)返回列表函數(shù)( public static class ~~~List)
public static class CleaningDisinfectionInfoList{ private String MESSAGE; private String STATUS; private List<Data> data; public String getMESSAGE() { return MESSAGE; } public void setMESSAGE(String MESSAGE) { this.MESSAGE = MESSAGE; } public String getSTATUS() { return STATUS; } public void setSTATUS(String STATUS) { this.STATUS = STATUS; } public List<Data> getData() { return data; } public void setData(List<Data> data) { this.data = data; } public static class Data implements Serializable{ private String date;//消毒日期 private String enterpriseName;//企業(yè)名稱 private String amount;//餐具數(shù)量 private String name;//餐具名稱 private int area;//企業(yè)所在區(qū)域 public String getDate() { return date; } public void setDate(String date) { this.date = date; } public String getEnterpriseName() { return enterpriseName; } public void setEnterpriseName(String enterpriseName) { this.enterpriseName = enterpriseName; } public String getAmount() { return amount; } public void setAmount(String amount) { this.amount = amount; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getArea() { return area; } public void setArea(int area) { this.area = area; } } } }
成員變量
private String MESSAGE;/ private String STATUS; private List<Data> data;//變量類(lèi)型為L(zhǎng)ist,即將獲取的數(shù)據(jù)以List返回
返回?cái)?shù)據(jù)列表設(shè)置函數(shù)
public static class Data implements Serializable{ private String date;//消毒日期 private String enterpriseName;//企業(yè)名稱 private String amount;//餐具數(shù)量 private String name;//餐具名稱 private int area;//企業(yè)所在區(qū)域 public String getDate() { return date; } public void setDate(String date) { this.date = date; } ············
定義返回?cái)?shù)據(jù)列表中的成員變量,并設(shè)定其getData和setData方法。
數(shù)據(jù)請(qǐng)求以及設(shè)定
數(shù)據(jù)請(qǐng)求
數(shù)據(jù)請(qǐng)求及設(shè)定在activity中完成。
private void getCleanDisinfetionData() { cleanningdisinfectionApi.getCleaningDisinfection(pageNo+":10", searchCleaningDisinfectionRequest) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<CleaningDisinfectionData.CleaningDisinfectionInfoList>() { @Override public void onSubscribe(Disposable d) { Log.d(TAG, "onSubscribe:"); } @Override public void onNext( CleaningDisinfectionData.CleaningDisinfectionInfoList list) { Log.d(TAG, "onNext:"); if (list != null&&list.getSTATUS().equals("200") && list.getData() != null) { cleanDisinfectionList.addAll(list.getData()); setListData(); } } @Override public void onError(Throwable e) { Log.d(TAG, "onError:" + e.getMessage());} @Override public void onComplete() { Log.d(TAG, "onComplete:"); } }); }
數(shù)據(jù)請(qǐng)求操作格式固定,即在activity中調(diào)用~~~Api進(jìn)行請(qǐng)求數(shù)據(jù),并將請(qǐng)求到的數(shù)據(jù)返回到List中。
數(shù)據(jù)顯示
private void setListData(){ mainScroll.setAdapter(new CleaningDisinfectionAdapter(cleanDisinfectionList)); if (RetrofitSingleton.dataNumber!=null){ if (Integer.parseInt(RetrofitSingleton.dataNumber)<10000){ resultNum.setText(RetrofitSingleton.dataNumber+"(家)"); } else { resultNum.setText("10000+(家)"); } if(cleanDisinfectionList.size()==Integer.parseInt(RetrofitSingleton.dataNumber)){ Toast.makeText(FoodOperationSearchActivity.this,"已加載全部數(shù)據(jù)",Toast.LENGTH_SHORT).show(); mRefreshLayout.setEnableLoadMore(false); }else { mRefreshLayout.setEnableLoadMore(true); } } }
數(shù)據(jù)顯示模塊,將請(qǐng)求到的數(shù)據(jù)傳遞到Adapter中,利用自己設(shè)置的Adapter完成數(shù)據(jù)顯示。
Adapter(適配器)設(shè)置
package com.upc.txgc.intelligentmarket2021.Views; import android.graphics.drawable.GradientDrawable; import android.support.annotation.NonNull; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.upc.txgc.intelligentmarket2021.HttpRequests.HttpObjects.CleaningDisinfectionData; import com.upc.txgc.intelligentmarket2021.HttpRequests.HttpObjects.LicenseData; import com.upc.txgc.intelligentmarket2021.R; import com.zzhoujay.richtext.spans.LongClickable; import org.greenrobot.eventbus.EventBus; import java.util.List; public class CleaningDisinfectionAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private static final String TAG = "CleaningDisinfection"; private final List<CleaningDisinfectionData.CleaningDisinfectionInfoList.Data> mData; public static class ItemClickListener implements View.OnClickListener { private CleaningDisinfectionData.CleaningDisinfectionInfoList.Data cleandisinfectionList; private int position; public void onClick(View v) { if (cleandisinfectionList != null) { Log.d(TAG, "position:" + position); EventBus.getDefault().post(cleandisinfectionList); //設(shè)置點(diǎn)擊效果 //statusChange(v); } } } public static class ScrollVH extends RecyclerView.ViewHolder { private View mView; private TextView enterpriseName;//企業(yè)名稱 private TextView enterpriseArea;//企業(yè)所在區(qū)域 private TextView disinfectionDate;//消毒日期 private TextView name;//物品名稱 private TextView amount;//物品數(shù)量 GradientDrawable statusDrawable = new GradientDrawable(); GradientDrawable licenseStatusDrawable = new GradientDrawable(); //創(chuàng)建自己的view public ScrollVH(View v) { super(v); mView = v; enterpriseName = v.findViewById(R.id.enterprise_name); enterpriseArea = v.findViewById(R.id.enterprise_area); disinfectionDate = v.findViewById(R.id.disinfection_date); name = v.findViewById(R.id.name); amount = v.findViewById(R.id.amount); } } //數(shù)據(jù)傳遞 public CleaningDisinfectionAdapter(List<CleaningDisinfectionData.CleaningDisinfectionInfoList.Data>data){ this.mData = data; } //綁定適配器界面 @Override public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.adapter_cleandisinfection, parent, false); return new ScrollVH(view); } //設(shè)置數(shù)據(jù) @Override public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { if (holder instanceof ScrollVH) { ScrollVH viewHolder = (ScrollVH) holder; if (mData.get(position).getEnterpriseName() != null) { viewHolder.enterpriseName.setText(mData.get(position).getEnterpriseName()); } if (mData.get(position).getDate() != null){ viewHolder.disinfectionDate.setText(mData.get(position).getDate()); } //if (mData.get(position).getArea() != null){ // viewHolder.enterpriseArea.setText(mData.get(position).getArea()); //} if (mData.get(position).getAmount() != null){ viewHolder.amount.setText(mData.get(position).getAmount()); } if(mData.get(position).getName()!=null){ viewHolder.name.setText(mData.get(position).getName()); } } } @Override public int getItemCount() { return mData.size(); } }
將數(shù)據(jù)通過(guò)構(gòu)造函數(shù)傳遞至適配器之中。
到此這篇關(guān)于Android完整的前后端交互參考案例的文章就介紹到這了,更多相關(guān)Android前后端交互內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android DateUtil時(shí)間工具類(lèi)使用方法示例解析
這篇文章主要為大家介紹了Android DateUtil時(shí)間工具類(lèi)使用方法示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07Android如何創(chuàng)建可拖動(dòng)的圖片控件
這篇文章主要為大家詳細(xì)介紹了Android如何創(chuàng)建可拖動(dòng)的圖片控件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03android ScrollView實(shí)現(xiàn)水平滑動(dòng)回彈
這篇文章主要為大家詳細(xì)介紹了android ScrollView實(shí)現(xiàn)水平滑動(dòng)回彈,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04Android 1.5 1.6 2.0 2.1 2.2 的區(qū)別詳解
本篇文章是對(duì)Android 1.5 1.6 2.0 2.1 2.2 版本之間的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06Android Studio使用ButterKnife和Zelezny的方法
這篇文章主要為大家詳細(xì)介紹了Android Studio使用ButterKnife和Zelezny的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04