android快速網絡請求之android-networking

今天介紹一個知道的人不多的庫,寫個簡單的頁面什么的。用起來很爽?如果你疑惑那么多開源的網絡庫為啥不用?
因為這個簡單方便。拿來就用。經過這幾天的實踐。確實可以。推薦一下

如果你需要 GITHUB

首先。引入依賴

implementation 'com.amitshekhar.android:android-networking:1.0.2'

添加權限:

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

然后你可以選擇在app的onCreate種注冊,當然。也可以在Application里

AndroidNetworking.initialize(getApplicationContext());

然后就是正題了:

通過一些自定義對其進行初始化,因為它使用OkHttp作為網絡層,您可以在初始化時傳遞自定義 okHttpClient。

// Adding an Network Interceptor for Debugging purpose :
OkHttpClient okHttpClient = new OkHttpClient() .newBuilder().addNetworkInterceptor(new StethoInterceptor()).build();
AndroidNetworking.initialize(getApplicationContext(),okHttpClient);  

使用帶有 Jackson Parser 的快速 Android 網絡

implementation 'com.amitshekhar.android:jackson-android-networking:1.0.2'
// Then set the JacksonParserFactory like below
AndroidNetworking.setParserFactory(new JacksonParserFactory());

如果你要使用GET請求

AndroidNetworking.get("https://fierce-cove-29863.herokuapp.com/getAllUsers/{pageNumber}").addPathParameter("pageNumber", "0").addQueryParameter("limit", "3").addHeaders("token", "1234").setTag("test").setPriority(Priority.LOW).build().getAsJSONArray(new JSONArrayRequestListener() {@Overridepublic void onResponse(JSONArray response) {// do anything with response}@Overridepublic void onError(ANError error) {// handle error}});             

如果你要使用POST請求

AndroidNetworking.post("https://fierce-cove-29863.herokuapp.com/createAnUser").addBodyParameter("firstname", "Amit").addBodyParameter("lastname", "Shekhar").setTag("test").setPriority(Priority.MEDIUM).build().getAsJSONObject(new JSONObjectRequestListener() {@Overridepublic void onResponse(JSONObject response) {// do anything with response}@Overridepublic void onError(ANError error) {// handle error}});

您還可以像這樣在 POST 請求中發布 java 對象、json、文件等。

User user = new User();
user.firstname = "Amit";
user.lastname = "Shekhar";AndroidNetworking.post("https://fierce-cove-29863.herokuapp.com/createUser").addBodyParameter(user) // posting java object.setTag("test").setPriority(Priority.MEDIUM).build().getAsJSONArray(new JSONArrayRequestListener() {public void onResponse(JSONArray response) {// do anything with response}public void onError(ANError error) {// handle error}});JSONObject jsonObject = new JSONObject();
try {jsonObject.put("firstname", "Amit");jsonObject.put("lastname", "Shekhar");
} catch (JSONException e) {e.printStackTrace();
}AndroidNetworking.post("https://fierce-cove-29863.herokuapp.com/createUser").addJSONObjectBody(jsonObject) // posting json.setTag("test").setPriority(Priority.MEDIUM).build().getAsJSONArray(new JSONArrayRequestListener() {public void onResponse(JSONArray response) {// do anything with response}public void onError(ANError error) {// handle error}});AndroidNetworking.post("https://fierce-cove-29863.herokuapp.com/postFile").addFileBody(file) // posting any type of file.setTag("test").setPriority(Priority.MEDIUM).build().getAsJSONObject(new JSONObjectRequestListener() {public void onResponse(JSONObject response) {// do anything with response}public void onError(ANError error) {// handle error}});               

將它與您自己的 JAVA 對象一起使用 - JSON Parser

/*--------------Example One -> Getting the userList----------------*/
AndroidNetworking.get("https://fierce-cove-29863.herokuapp.com/getAllUsers/{pageNumber}").addPathParameter("pageNumber", "0").addQueryParameter("limit", "3").setTag(this).setPriority(Priority.LOW).build().getAsObjectList(User.class, new ParsedRequestListener<List<User>>() {@Overridepublic void onResponse(List<User> users) {// do anything with responseLog.d(TAG, "userList size : " + users.size());for (User user : users) {Log.d(TAG, "id : " + user.id);Log.d(TAG, "firstname : " + user.firstname);Log.d(TAG, "lastname : " + user.lastname);}}@Overridepublic void onError(ANError anError) {// handle error}});
/*--------------Example Two -> Getting an user----------------*/
AndroidNetworking.get("https://fierce-cove-29863.herokuapp.com/getAnUserDetail/{userId}").addPathParameter("userId", "1").setTag(this).setPriority(Priority.LOW).build().getAsObject(User.class, new ParsedRequestListener<User>() {@Overridepublic void onResponse(User user) {// do anything with responseLog.d(TAG, "id : " + user.id);Log.d(TAG, "firstname : " + user.firstname);Log.d(TAG, "lastname : " + user.lastname);}@Overridepublic void onError(ANError anError) {// handle error}}); 
/*-- Note : YourObject.class, getAsObject and getAsObjectList are important here --*/              

從服務器下載文件

AndroidNetworking.download(url,dirPath,fileName).setTag("downloadTest").setPriority(Priority.MEDIUM).build().setDownloadProgressListener(new DownloadProgressListener() {@Overridepublic void onProgress(long bytesDownloaded, long totalBytes) {// do anything with progress  }}).startDownload(new DownloadListener() {@Overridepublic void onDownloadComplete() {// do anything after completion}@Overridepublic void onError(ANError error) {// handle error    }});        

上傳文件

AndroidNetworking.upload(url).addMultipartFile("image",file)    .addMultipartParameter("key","value").setTag("uploadTest").setPriority(Priority.HIGH).build().setUploadProgressListener(new UploadProgressListener() {@Overridepublic void onProgress(long bytesUploaded, long totalBytes) {// do anything with progress }}).getAsJSONObject(new JSONObjectRequestListener() {@Overridepublic void onResponse(JSONObject response) {// do anything with response                }@Overridepublic void onError(ANError error) {// handle error }}); 

在另一個線程執行器中獲取響應和完成
(注意:錯誤和進度將始終在應用程序的主線程中返回)

AndroidNetworking.upload(url).addMultipartFile("image",file)  .addMultipartParameter("key","value")  .setTag("uploadTest").setPriority(Priority.HIGH).build().setExecutor(Executors.newSingleThreadExecutor()) // setting an executor to get response or completion on that executor thread.setUploadProgressListener(new UploadProgressListener() {@Overridepublic void onProgress(long bytesUploaded, long totalBytes) {// do anything with progress }}).getAsJSONObject(new JSONObjectRequestListener() {@Overridepublic void onResponse(JSONObject response) {// below code will be executed in the executor provided// do anything with response                }@Overridepublic void onError(ANError error) {// handle error }}); 

如果請求已完成給定閾值,則設置不取消請求的百分比閾值

AndroidNetworking.download(url,dirPath,fileName).setTag("downloadTest").setPriority(Priority.MEDIUM).setPercentageThresholdForCancelling(50) // even if at the time of cancelling it will not cancel if 50% .build()                                 // downloading is done.But can be cancalled with forceCancel..setDownloadProgressListener(new DownloadProgressListener() {@Overridepublic void onProgress(long bytesDownloaded, long totalBytes) {// do anything with progress  }}).startDownload(new DownloadListener() {@Overridepublic void onDownloadComplete() {// do anything after completion}@Overridepublic void onError(ANError error) {// handle error    }});   

取消請求。

AndroidNetworking.cancel("tag"); // All the requests with the given tag will be cancelled.
AndroidNetworking.forceCancel("tag");  // All the requests with the given tag will be cancelled , even if any percent threshold is// set , it will be cancelled forcefully. 
AndroidNetworking.cancelAll(); // All the requests will be cancelled.  
AndroidNetworking.forceCancelAll(); // All the requests will be cancelled , even if any percent threshold is// set , it will be cancelled forcefully.

從網絡加載圖像到 ImageView

  <com.androidnetworking.widget.ANImageViewandroid:id="@+id/imageView"android:layout_width="100dp"android:layout_height="100dp"android:layout_gravity="center" />imageView.setDefaultImageResId(R.drawable.default);imageView.setErrorImageResId(R.drawable.error);imageView.setImageUrl(imageUrl);          

使用某些指定參數從 url 獲取位圖

AndroidNetworking.get(imageUrl).setTag("imageRequestTag").setPriority(Priority.MEDIUM).setBitmapMaxHeight(100).setBitmapMaxWidth(100).setBitmapConfig(Bitmap.Config.ARGB_8888).build().getAsBitmap(new BitmapRequestListener() {@Overridepublic void onResponse(Bitmap bitmap) {// do anything with bitmap}@Overridepublic void onError(ANError error) {// handle error}});

為特定請求自定義 OkHttpClient

OkHttpClient okHttpClient = new OkHttpClient().newBuilder().addInterceptor(new GzipRequestInterceptor()).build();AndroidNetworking.get("https://fierce-cove-29863.herokuapp.com/getAllUsers/{pageNumber}").addPathParameter("pageNumber", "0").addQueryParameter("limit", "3").addHeaders("token", "1234").setTag("test").setPriority(Priority.LOW).setOkHttpClient(okHttpClient) // passing a custom okHttpClient .build().getAsJSONArray(new JSONArrayRequestListener() {@Overridepublic void onResponse(JSONArray response) {// do anything with response}@Overridepublic void onError(ANError error) {// handle error}});

想更多了解。自己去看吧

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/207053.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/207053.shtml
英文地址,請注明出處:http://en.pswp.cn/news/207053.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL 數據遷移要點

目錄 1. 相同版本的遷移 2. 不用版本的遷移 3. 不同數據庫的遷移 數據庫遷移就是把數據從一個系統移動到另一個系統上&#xff0c;遷移過程其實就是在源數據庫備份和目標數據庫恢復的過程組合。遷移的原因是多種多樣的&#xff0c;比如&#xff1a; 需要安裝新的數據庫服務…

elasticsearch中LessThen遇到的坑

開發中&#xff0c;使用到LessThen-小于某個參數的邏輯查詢&#xff0c;如下&#xff1a; /// <summary> /// 查詢狀態已發布&#xff08;狀態小于2&#xff09;的政策要聞分頁 /// </summary> /// <param name"input"></param> /// <re…

使用OkHttp上傳本地圖片及參數

下面以一個例子來講解在項目中如何使用OKHttp來對本地圖片做個最簡單的上傳功能&#xff0c;基本上無封裝&#xff0c;只需要簡單調用便可&#xff08;對于OKHttp的引入不再單獨做介紹&#xff09;。 1&#xff1a;構建上傳圖片附帶的參數&#xff08;params&#xff09; Map…

2.vue學習筆記(目錄結構+模板語法+屬性綁定)

1.目錄結構 1.vscode ——VSCode工具的配置文件夾 2.node_modules ——Vue項目的運行依賴文件夾 3.public ——資源文件夾&#xff08;瀏覽器圖標&#xff09; 4.src ——源碼文件夾 5..gitgnore ——git忽略文件 6.index.html ——如果html文件 7.package.json —…

基于SpringBoot+Vue學生成績管理系統前后端分離(源碼+數據庫)

一、項目簡介 本項目是一套基于SpringBootVue學生成績管理系統&#xff0c;主要針對計算機相關專業的正在做bishe的學生和需要項目實戰練習的Java學習者。 包含&#xff1a;項目源碼、數據庫腳本等&#xff0c;該項目可以直接作為bishe使用。 項目都經過嚴格調試&#xff0c;確…

ElasticSearch中的分析器是什么?

在Elasticsearch中&#xff0c;分析器&#xff08;Analyzer&#xff09;是一個用于文本分析的重要組件。它定義了如何將文本分解成單詞和子詞&#xff0c;這對于索引和搜索是非常重要的。 在Elasticsearch中&#xff0c;分析器定義了如何將文本轉換為可以被索引和搜索的形式。…

虛幻學習筆記10—C++函數與藍圖的通信

一、前言 除了上一章C變量與藍圖通信講的變量能與藍圖通信外&#xff0c;還有函數和枚舉也可以和藍圖通信。函數的關鍵字為”UFUNCTION“、枚舉的關鍵字為”UENUM“。 二、實現 2.1、BlueprintCallable藍圖中調用 該函數時帶執行的&#xff0c;帶入如下。編譯成功后在藍圖中輸…

macOS 獲取文件夾大小

macOS 獲取文件夾大小 獲取文件夾大小的擴展如下&#xff1a; extension URL {var fileSize: Int? { // in bytesdo {let val try self.resourceValues(forKeys: [.totalFileAllocatedSizeKey, .fileAllocatedSizeKey])return val.totalFileAllocatedSize ?? val.fileAll…

來自Sui的溫馨建議:保護您的Web3私鑰

當您安裝一個錢包并創建Sui賬戶時&#xff0c;錢包包含一個公鑰和一個私鑰。保護好私鑰的安全非常重要&#xff0c;從而可以保護您的Sui資產&#xff0c;包括錢包中的任何tokens。 公鑰加密技術是幾十年前開發的&#xff0c;是當今互聯網上大多數安全交易的基礎&#xff0c;包…

Navicat Premium 16 for Mac/Windows:高效的數據庫開發工具

Navicat Premium 16是一款功能強大的數據庫開發工具&#xff0c;為開發人員提供了全面的工具和功能&#xff0c;幫助他們更高效地進行數據庫開發和管理。不論是初學者還是專業開發人員&#xff0c;Navicat Premium 16都能滿足他們的需求&#xff0c;并提供直觀、易用的界面。 …

【深度學習】AlexNet網絡實現貓狗分類

【深度學習】AlexNet網絡實現貓狗分類 AlexNet簡介 AlexNet是一種卷積神經網絡&#xff08;Convolutional Neural Network&#xff0c;CNN&#xff09;模型&#xff0c;它在2012年的ImageNet圖像分類挑戰賽中取得了重大突破&#xff0c;引發了深度學習在計算機視覺領域的熱潮…

為“異常”努力是值得的

異常是OO語言處理錯誤的方式,在C中&#xff0c;鼓勵使用異常。侯捷再書中談起異常&#xff0c;“十年前撰寫“未將異常考慮在內的”函數是為一種美好實踐&#xff0c;而今我們致力于寫出“異常安全碼”。”可見異常安全的重要。 說起異常安全&#xff0c;首先就要是異常的出現…

Leetcode—213.打家劫舍II【中等】

2023每日刷題&#xff08;五十二&#xff09; Leetcode—213.打家劫舍II 算法思路 實現代碼 class Solution { public:// 左閉右開int rob1(vector<int>& nums, int start, int end) {int n nums.size();int f0 0, f1 0, new_f 0;for(int i start; i < end…

pytorch學習入門之 Variable(變量)

Variable(變量) autograd.Variable 是包的核心類. 它包裝了張量, 并且支持幾乎所有的操作. 一旦你完成了你的計算, 你就可以調用 .backward() 方法, 然后所有的梯度計算會自動進行. 你還可以通過 .data 屬性來訪問原始的張量, 而關于該 variable(變量)的梯度會被累計到 .…

初識 OpenCV

初識 OpenCV 簡介 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一個涵蓋了數百種計算機視覺算法的開源算法庫。 OpenCV 具有模塊化結構&#xff0c;這意味著該軟件包包含多個共享或靜態庫。其中包含以下模塊&#xff1a; Core functionality (core…

機器學習硬件十年:性能變遷與趨勢

本文分析了機器學習硬件性能的最新趨勢&#xff0c;重點關注不同GPU和加速器的計算性能、內存、互連帶寬、性價比和能效等指標。這篇分析旨在提供關于ML硬件能力及其瓶頸的全面視圖。本文作者來自調研機構Epoch&#xff0c;致力于研究AI發展軌跡與治理的關鍵問題和趨勢。 &…

【送書活動四期】被GitHub 要求強制開啟 2FA 雙重身份驗證,我該怎么辦?

記得是因為fork了OpenZeppelin/openzeppelin-contracts的項目&#xff0c;之后就被GitHub 要求強制開啟 2FA 雙重身份驗證了&#xff0c;一拖再拖&#xff0c;再過幾天帳戶操作將受到限制了&#xff0c;只能去搞一下了 目錄 2FA是什么為什么要開啟 2FA 驗證GitHub 欲在整個平臺…

消息隊列 - RabbitMQ

消息隊列 - RabbitMQ 1. 初識 MQ1.1 同步調用1.2 異步調用1.3.技術選型 2. RabbitMQ2.1 安裝2.2 收發信息2.2.1 交換機(Exchange)2.2.2 隊列2.2.3 綁定關系2.2.4 發送消息 2.3 數據隔離 1. 初識 MQ 微服務一旦拆分&#xff0c;必然涉及到服務之間的相互調用&#xff0c;之前講…

MySQL六 | 存儲引擎

目錄 存儲引擎 存儲引擎特點 存儲引擎選擇 Innodb與MyISAM區別 存儲引擎 默認存儲引擎:InnoDB show engines;#展示當前數據庫支持的存儲引擎 存儲引擎特點 特點InnoDBMyISAMMemory存儲限制64TB有有事務安全支持--鎖機制行鎖表鎖表鎖Btree鎖支持支持 支持 Hash索引--支…

編譯 Android gradle-4.6-all.zip 報錯問題記錄

編譯 Android gradle-4.6-all.zip 報錯問題記錄 方法一&#xff1a;替換資源&#xff1a;方法二&#xff1a;修改源方法三&#xff1a;修改版本 編譯時候無法下載 gradle-4.6-all Downloading https://services.gradle.org/distributions/gradle-4.6-all.zip 方法一&#xf…