NoHttp封裝--02 自定義請求

来源:https://www.cnblogs.com/ganchuanpu/archive/2018/05/12/9029233.html
-Advertisement-
Play Games

bean實體類請求: 1.bean 2.針對bean的request 3.具體在activity中使用: 可以解析所有JavaBean的自定義請求 activity ...


bean實體類請求:

1.bean

 1 import java.io.Serializable;
 2 import com.alibaba.fastjson.annotation.JSONField;
 3 
 4 public class UserInfo implements Serializable {
 5     private static final long serialVersionUID = 145641645L;
 6 
 7     @JSONField(name = "data")
 8     private String data;
 9     @JSONField(name = "error")
10     private int error;
11     @JSONField(name = "msg")
12     private String msg;
13 
14     public UserInfo() {
15         super();
16     }
17 
18     public UserInfo(String data, int error, String msg) {
19         super();
20         this.data = data;
21         this.error = error;
22         this.msg = msg;
23     }
24     public String getData() {
25         return data;
26     }
27     public void setData(String data) {
28         this.data = data;
29     }
30     public int getError() {
31         return error;
32     }
33     public void setError(int error) {
34         this.error = error;
35     }
36 
37     public String getMsg() {
38         return msg;
39     }
40     public void setMsg(String msg) {
41         this.msg = msg;
42     }
43 
44     public boolean isSucceed() {
45         return 1 == error;
46     }
47 
48 }

2.針對bean的request

 1 import com.alibaba.fastjson.JSON;
 2 import com.yolanda.nohttp.Headers;
 3 import com.yolanda.nohttp.JsonObjectRequest;
 4 import com.yolanda.nohttp.RequestMethod;
 5 import com.yolanda.nohttp.RestRequest;
 6 import com.yolanda.nohttp.StringRequest;
 7 import com.yolanda.nohttptest.bean.UserInfo;
 8 
 9 public class UserInfoRequest extends RestRequest<UserInfo> {
10 
11     public UserInfoRequest(String url, RequestMethod requestMethod) {
12         super(url, requestMethod);
13     }
14     public UserInfoRequest(String url) {
15         super(url);
16     }
17     @Override
18     public String getAccept() {
19         return JsonObjectRequest.ACCEPT;
20     }
21     @Override
22     public UserInfo parseResponse(String url, Headers responseHeaders, byte[] responseBody) {
23         UserInfo info = null;
24         String string = StringRequest.parseResponseString(url, responseHeaders, responseBody);
25         try {
26             info = JSON.parseObject(string, UserInfo.class);
27         } catch (Exception e) {
28             info = new UserInfo();
29         }
30         return info;
31     }
32 }

 

3.具體在activity中使用:

 1 public class ObjectActivity extends Activity implements View.OnClickListener {
 2 
 3     private final int NOHTTP_LOGIN = 0x01;
 4     private final int NOHTTP_LOGOUT = 0x02;
 5 
 6     private TextView tvResult;
 7 
 8     @Override
 9     protected void onCreate(Bundle savedInstanceState) {
10         super.onCreate(savedInstanceState);
11         setContentView(R.layout.activity_object);
12         findViewById(R.id.btn_login).setOnClickListener(this);
13         findViewById(R.id.btn_logout).setOnClickListener(this);
14         tvResult = (TextView) findViewById(R.id.tv_result);
15     }
16 
17     @Override
18     public void onClick(View v) {
19         if (v.getId() == R.id.btn_login) {
20             UserInfoRequest request = new UserInfoRequest(Constants.LOGIN, RequestMethod.GET);
21             request.add("userName", "yolanda");
22             request.add("userPwd", "123");
23             CallServer.getInstance().add(this, request, callBack, NOHTTP_LOGIN, true, false, true);
24         } else {
25             UserInfoRequest request = new UserInfoRequest(Constants.LOGOUT, RequestMethod.GET);
26             CallServer.getInstance().add(this, request, callBack, NOHTTP_LOGOUT, true, false, true);
27         }
28     }
29 
30     private HttpCallBack<UserInfo> callBack = new HttpCallBack<UserInfo>() {
31 
32         @Override
33         public void onSucceed(int what, Response<UserInfo> response) {
34             UserInfo info = response.get();
35             if (what == NOHTTP_LOGIN) {// 處理登錄結果
36                 if (info.isSucceed()) {
37                     tvResult.setText("登錄介面結果:" + info.getData());
38                 }
39             } else if (what == NOHTTP_LOGOUT) {// 處理登出結果
40                 if (info.isSucceed()) {
41                     tvResult.setText("退出介面結果:" + info.getData());
42                 }
43             }
44         }
45 
46         @Override
47         public void onFailed(int what, String url, Object tag, Exception exception, int responseCode, long networkMillis) {
48             tvResult.setText("請求失敗");
49         }
50     };
51 }

 


可以解析所有JavaBean的自定義請求

 1 public class JavaBeanRequest<E> extends RestRequest<E> {
 2 
 3     private Class<E> clazz;
 4 
 5     public JavaBeanRequest(String url, RequestMethod requestMethod, Class<E> clazz) {
 6         super(url, requestMethod);
 7         this.clazz = clazz;
 8     }
 9 
10     public JavaBeanRequest(String url, Class<E> clazz) {
11         this(url, RequestMethod.GET, clazz);
12     }
13 
14     @Override
15     public E parseResponse(String url, Headers responseHeaders, byte[] responseBody) {
16         String result = StringRequest.parseResponseString(url, responseHeaders, responseBody);
17         try {
18             return JSON.parseObject(result, clazz);
19         } catch (Exception e) {
20             E instance = null;
21             try {
22                 // 但是前提是傳進來的JavaBean必須提供了預設實現
23                 instance = clazz.newInstance();
24             } catch (InstantiationException e1) {
25             } catch (IllegalAccessException e1) {
26             }
27             return instance;
28         }
29     }
30 
31     @Override
32     public String getAccept() {
33         return JsonObjectRequest.ACCEPT;
34     }
35 
36 }

activity

Request<ServerBean> request = new JavaBeanRequest<ServerBean>(url, ServerBean.class);
CallServer.getInstance().add(this, request, callBack, 0, true, false, true);

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、Oracle下載 官網地址:http://www.oracle.com/technetwork/database/enterprise edition/downloads/index.html 百度網盤:鏈接: https://pan.baidu.com/s/1q2vSPlHk_g1zLSANY ...
  • 背景 當站點的規模不斷膨脹,這給資料庫帶來巨大的查詢壓力,單單資料庫性能優化已經是不夠的,需對資料庫進行伸縮擴展。有三種方式: 1、資料庫主從 2、數據表分庫(垂直分區) 3、數據分區(水平分區) PS:事實上,很多大規模的站點基本上經歷了從簡單主從複製到垂直分區,再到水平分區的步驟。 資料庫主從 ...
  • 將數據導入 oracle 的方法應該很多 , 對於不同需求有不同的導入方式 , 最近使用oracle的sqlldr命令 導入資料庫數據感覺是個挺不錯的技術點 。 使用sqlldr命令 將文本文件導入 oracle中大致需要兩步 : 第一步:編寫ctl控制文件 Load data --裝載數據(第二步 ...
  • 最的mysql在裝的時候就可以設置 ,但是低版本的好像不行,需要在裝了以後才能設置。 mac下,mysql5.7.18連接出錯,錯誤信息為:Access denied for user 'root'@'localhost' (using password: YES) ()裡面的為shell中輸入的命 ...
  • 在ubuntu系統中操作命令:登錄:mysql -uroot -p啟動:service mysql start停止:service mysql stop重啟:service mysql restart 創建資料庫:create database 資料庫名字 charset = utf8;刪除資料庫: ...
  • 1、Default模式,也是沒有設置緩存模式時的預設模式 這個模式實現http協議中的內容,比如響應碼是304時,當然還會結合E-Tag和LastModify等頭。 StringRequest request = new StringRequest(url, method); request.set ...
  • NoHttp請求自動維持Cookie: 1.支持Session、Cookie、臨時Cookie的位置。 2.支持App重啟、關機開機後繼續持久化維持。 3.提供了介面,允許開發者監聽Cookie的變化,也可以改變某個Cookie的值。 伺服器端: 客戶端: 文章:https://blog.csdn. ...
  • 原文 http://blog.votzone.com/2018/05/12/apk-merge.html 之前接手過一個sdk的開發工作,在開發過程中有一個很重要的點就是儘量使用代碼來創建控制項,資源文件最好放到assets目錄下,如果必須使用res資源,需要通過 getResources().get ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...