日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android中使用retrofit2进行网络get请求查询数据和post请求上传文件

發布時間:2025/3/19 Android 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android中使用retrofit2进行网络get请求查询数据和post请求上传文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

場景

Retrofit2

Retrofit 是對 OkHttp 的封裝,是主流的網絡框架。

適用于Android 和 Java 的類型安全的HTTP客戶端,由Square提供的。

Retrofit是一種HTTP客戶端框架,使用它,我們可以完成有關HTTP的工作。

Retrofit Github 主頁:

https://github.com/square/Retrofit

注:

博客:
https://blog.csdn.net/badao_liumang_qizhi
關注公眾號
霸道的程序猿
獲取編程相關電子書、教程推送與免費下載。

實現

導入依賴

在build.gradle中添加依賴

??? //Retrofit(網絡請求框架)implementation 'com.squareup.retrofit2:retrofit:2.5.0'implementation 'com.squareup.retrofit2:converter-gson:2.5.0'

添加位置

?

然后點擊右上角的Sync now

注意:這里不能導入OkHttp與Gson,Retrofit內部已經包含這兩個框架,否則會導致版本沖突。

打卡網絡權限

在AndroidManifest中添加網絡權限。

<uses-permission android:name="android.permission.INTERNET" />

搭建Http客戶端

為了在調用接口時方便我們新建一個單例模式的類WebClient去構造Retrofit的實例

在src下包路徑下新建web包,包下新建webclient類

package com.badao.badaoimclient.web;import android.util.Log;import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory;public class WebClient {private static ApiService INSTANCE;private static final String BASE_URL = "http://你的后臺服務的ip:8000/";public static ApiService getInstance() {if (INSTANCE == null) {synchronized (ApiService.class) {if (INSTANCE == null) {INSTANCE = new Retrofit.Builder().baseUrl(BASE_URL).addConverterFactory(GsonConverterFactory.create()).build().create(ApiService.class);Log.i("INSTANCE",BASE_URL);}}}return INSTANCE;}}

這里指定的BASE_RUL就是你后臺服務地址的ip+端口號,最后要帶一個斜杠。

然后客戶端需要返回一個接口類ApiService,這個接口類是自定義的。

新建接口類ApiService

package com.badao.badaoimclient.web;import com.badao.badaoimclient.bean.ImUserBean; import com.badao.badaoimclient.bean.UploadBean; import okhttp3.MultipartBody; import retrofit2.Call; import retrofit2.http.GET; import retrofit2.http.Multipart; import retrofit2.http.POST; import retrofit2.http.Part;public interface ApiService {/*無參GET請求 *///沒有數據就填 '.' 或者 '/'//獲取通訊錄接口@GET("system/imuser/listForApp")Call<ImUserBean> getImUserList();//文件上傳接口@Multipart@POST("/common/upload")Call<UploadBean> upload(@Part MultipartBody.Part file);}

這里接口類中有兩個方法,一個是get方法請求數據,一個是post方法上傳文件。

先看這里的get請求的接口,接口的返回值ImUserBean是根據服務接口返回的Json數據生成的bean。

?

怎樣根據Json數據生成實體Bean參考如下:

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/110426851

生成的實體ImUserBean如下

package com.badao.badaoimclient.bean;import com.google.gson.annotations.SerializedName;import java.util.List;public class ImUserBean {private int total;private int code;private Object msg;private List<RowsBean> rows;public int getTotal() {return total;}public void setTotal(int total) {this.total = total;}public int getCode() {return code;}public void setCode(int code) {this.code = code;}public Object getMsg() {return msg;}public void setMsg(Object msg) {this.msg = msg;}public List<RowsBean> getRows() {return rows;}public void setRows(List<RowsBean> rows) {this.rows = rows;}public static class RowsBean {@SerializedName("id")private int idX;@SerializedName("imNum")private String imNumX;@SerializedName("canOnline")private int canOnlineX;public int getIdX() {return idX;}public void setIdX(int idX) {this.idX = idX;}public String getImNumX() {return imNumX;}public void setImNumX(String imNumX) {this.imNumX = imNumX;}public int getCanOnlineX() {return canOnlineX;}public void setCanOnlineX(int canOnlineX) {this.canOnlineX = canOnlineX;}} }

然后真正調用的接口的url就是

上面配置的BASE_URL加上你的接口方法中配置的url

Get接口調用

在需要調用get接口請求數據的地方

??????? //異步請求通訊錄WebClient.getInstance().getImUserList().enqueue(new Callback<ImUserBean>() {@Overridepublic void onResponse(Call<ImUserBean> call, Response<ImUserBean> response) {Log.i("response",response.toString());if(response.code()==200) {//獲取請求的數據并進行后續操作ImUserBean userBean = response.body();rowsBeanList = userBean.getRows();myAdapter = new MyAdapter(rowsBeanList);listView.setAdapter(myAdapter);}}@Overridepublic void onFailure(Call<ImUserBean> call, Throwable t) {Log.i("onFailure",t.toString());}});}

通過它的回調方法來獲取響應碼和響應體。

此后臺接口是用SpringBoot寫成,后臺get接口部分實現

??? @GetMapping("/listForApp")@ResponseBodypublic TableDataInfo listGet(ImUser imUser){startPage();List<ImUser> list = imUserService.selectImUserList(imUser);return getDataTable(list);}

其中在getDataTable中最終返回

?

調用一下此接口可以看到其響應碼為200

?

響應體就是上面的json數據

?

然后可以將get請求的數據通過適配器顯示在ListView上

?

關于適配器的使用參照如下:

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/111240545

POST請求上傳文件?

首先在ApiService中添加接口聲明

??? //文件上傳接口@Multipart@POST("/common/upload")Call<UploadBean> upload(@Part MultipartBody.Part file);

然后在需要用到進行文件上傳的地方

??????????????? //上傳語音文件到服務器RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), file);MultipartBody.Part part = MultipartBody.Part.createFormData("file", file.getName(), requestBody);WebClient.getInstance().upload(part).enqueue(new Callback<UploadBean>() {@Overridepublic void onResponse(Call<UploadBean> call, Response<UploadBean> response) {if(response.code()==200){//對服務器地址進行賦值chatItem.setRemoteContent(response.body().getFileName());}else {Toast.makeText(App.context,"服務器返回"+response.code(),Toast.LENGTH_SHORT).show();return;}}@Overridepublic void onFailure(Call<UploadBean> call, Throwable t) {Toast.makeText(App.context,t.toString(),Toast.LENGTH_SHORT).show();}});

其中file就是需要進行上傳的文件,需要構造出一個part對象,然后下面是兩個回調方法

觸發post方法后,構造part對象成功

?

后臺使用sprinboot寫的post接口

??? /*** 通用上傳請求*/@PostMapping("/common/upload")@ResponseBodypublic AjaxResult uploadFile(MultipartFile file) throws Exception{try{// 上傳文件路徑String filePath = RuoYiConfig.getUploadPath();// 上傳并返回新文件名稱String fileName = FileUploadUtils.upload(filePath, file);String url = serverConfig.getUrl() + fileName;AjaxResult ajax = AjaxResult.success();ajax.put("fileName", fileName);ajax.put("url", url);return ajax;}catch (Exception e){return AjaxResult.error(e.getMessage());}}

后臺接收到請求后

?

后臺返回給Android后

?

?


?

總結

以上是生活随笔為你收集整理的Android中使用retrofit2进行网络get请求查询数据和post请求上传文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 97超碰人人爱 | 亚洲乱码国产乱码精品 | 爱爱视频在线看 | av视屏在线 | 久久22| 日韩最新中文字幕 | 国产精品色网 | av天天射 | 国产精品亚洲综合 | 欧美一区二区免费电影 | 亚洲经典视频 | 亚洲一区二区三区久久久成人动漫 | 欧美精品99久久久 | 欧美理论在线观看 | 午夜剧场91 | 波多野结衣视频在线播放 | 日韩精品免费一区二区三区 | 永久免费54看片 | 阿v免费视频 | 日韩aⅴ片 | www.色com | 青青草视频网站 | 亚洲va国产va天堂va久久 | 特一级黄色片 | 亚洲综合精品视频 | 欧美巨乳美女 | 亚洲网站在线 | 99久久99久久久精品棕色圆 | 在线中文字幕视频 | 亚洲4p | 欧美videossex极品 | 欧美丰满美乳xxⅹ高潮www | 99福利在线 | 中文天堂资源在线 | 欧美日韩国产中文字幕 | 国产精品久久777777毛茸茸 | 宅男午夜在线 | 中文字幕超清在线观看 | 国产精品久久无码一三区 | 免费看裸体网站 | 日韩无套| 亚洲免费片 | 欧美精品福利视频 | 手机福利视频 | 国产麻豆剧传媒精品国产 | 国产黄色精品视频 | 久综合 | 91精品国产综合久久久蜜臀 | 性生活一级大片 | 国产成人麻豆精品午夜在线 | 精品久久BBBBB精品人妻 | 中文亚洲av片在线观看 | 欧美色xxxx | 久久美利坚 | 日本福利在线 | 高h教授1v1h喂奶 | 精品三级在线观看 | 99视频99| 久久久亚洲天堂 | 国产主播精品在线 | 欧美中文字幕一区二区三区 | 久久精品视频免费播放 | 国产亚洲视频在线 | 大伊人久久 | 男女性网站 | 中文字幕在线网 | 牛人盗摄一区二区三区视频 | 欧美天天色 | 伊人青青久 | 日本一区二区三区视频在线 | 泰坦尼克号3小时49分的观看方法 | 中文字幕线人 | 91高跟黑色丝袜呻吟动态图 | 国产精品无码专区av在线播放 | 九色在线视频 | 日产久久久久久 | 亚洲一区二区精品在线 | 香蕉视频在线免费 | 国产激情一区二区三区 | 国产婷婷久久 | 欧美激情一区在线 | 国产淫视频 | 国产精品1页| 免费精品在线视频 | 91小宝寻花一区二区三区 | 深爱开心激情网 | 久久久青 | 欧美一二区视频 | 国产剧情一区 | 国语对白一区 | 伊人网在线播放 | 饥渴少妇色诱水电工 | 2019天天操| 怡红院综合网 | 99久久精品一区二区 | 日韩电影在线观看一区 | 西西人体www大胆高清 | 中文字幕在线观看日韩 | 男女黄床上色视频免费的软件 |