Android完整的前后端交互參考案例
Android 前端獲取數據并顯示
API 連接獲取(~~Api.java)
文件創(chuàng)建
新建Kotlin class/file 中的 Interface 文件。
文件內容
public interface CleaningDisinfectionApi { //綜合查詢清洗消毒列表 @POST("formatdisinfection/getPage") Observable<CleaningDisinfectionData.CleaningDisinfectionInfoList> getCleaningDisinfection(@Header("Range") String page, @Body CleaningDisinfectionData.SearchCleaningDisinfectionRequest searchCleaningDisinfectionRequest); }
POST
內容格式固定,內容根據結構文檔請求不同數據組
@POST("formatdisinfection/getPage")
其格式固定,POST后內容代表根據接口文檔進行填寫。
Observable
Observable<CleaningDisinfectionData.CleaningDisinfectionInfoList> getCleaningDisinfection(@Header("Range") String page, @Body CleaningDisinfectionData.SearchCleaningDisinfectionRequest searchCleaningDisinfectionRequest);
CleaningDisinfectionData.CleaningDisinfectionInfoList
返回數據列表,數據內容根據需求自行設計
getCleaningDisinfection(@Header("Range") String page, @Body CleaningDisinfectionData.SearchCleaningDisinfectionRequest searchCleaningDisinfectionRequest)
函數格式確定,
Header為指定的內容,
Body是數據請求文件(~~~~~~Data.~~~~~~Request)對象,在此請求數據中,一般請求整個完整的對象數據組。
設置數據是根據不同的需求顯示不同的數據。
數據請求以及設定(~~Data.java)
此部分主要完成利用Api接口,完成完整數據組的獲取,以及根據不同需求設定不同的返回數據列表。
數據請求函數(public static class ~~~Request)
此函數請求完整的數據組。
即*根據接口文檔參數內容,定義所有的成員變量,并于文檔參數一一對應*,并定義其get和set方法。
private String date;//消毒日期 private String amount;//餐具數量 private String coaCode;//企業(yè)許可證號 private String coaName;//許可證企業(yè)名稱 private String entCreditCode;//企業(yè)社會信用代碼 private String enterpriseName;//企業(yè)名稱 private String name;//餐具名稱 private String way;//消毒方式 private String person;//操作人姓名 private String remark;//備注 private String start;//開始日期 private String end;//結束日期 private String addTime; private String operator; private String operatorIp; private String operatorTime; private int id; private int start1;//開始時間 小時 private int start2;//開始時間 分 private int end1;//結束時間 小時 private int end2;//結束時間 秒 private int area;//企業(yè)所在區(qū)域 private int caId;//從業(yè)人員ID
數據返回列表函數( 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;//餐具數量 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;//變量類型為List,即將獲取的數據以List返回
返回數據列表設置函數
public static class Data implements Serializable{ private String date;//消毒日期 private String enterpriseName;//企業(yè)名稱 private String amount;//餐具數量 private String name;//餐具名稱 private int area;//企業(yè)所在區(qū)域 public String getDate() { return date; } public void setDate(String date) { this.date = date; } ············
定義返回數據列表中的成員變量,并設定其getData和setData方法。
數據請求以及設定
數據請求
數據請求及設定在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:"); } }); }
數據請求操作格式固定,即在activity中調用~~~Api進行請求數據,并將請求到的數據返回到List中。
數據顯示
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,"已加載全部數據",Toast.LENGTH_SHORT).show(); mRefreshLayout.setEnableLoadMore(false); }else { mRefreshLayout.setEnableLoadMore(true); } } }
數據顯示模塊,將請求到的數據傳遞到Adapter中,利用自己設置的Adapter完成數據顯示。
Adapter(適配器)設置
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); //設置點擊效果 //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;//物品數量 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); } } //數據傳遞 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); } //設置數據 @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(); } }
將數據通過構造函數傳遞至適配器之中。
到此這篇關于Android完整的前后端交互參考案例的文章就介紹到這了,更多相關Android前后端交互內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Android 1.5 1.6 2.0 2.1 2.2 的區(qū)別詳解
本篇文章是對Android 1.5 1.6 2.0 2.1 2.2 版本之間的區(qū)別進行了詳細的分析介紹,需要的朋友參考下2013-06-06Android Studio使用ButterKnife和Zelezny的方法
這篇文章主要為大家詳細介紹了Android Studio使用ButterKnife和Zelezny的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-04-04