JavaFX-OKhttp簡(jiǎn)易封裝

0.前言

JavaFX作為JAVA客戶端GUI框架戚炫,在使用JavaFX作為前端開(kāi)發(fā)的時(shí)候猜旬,如果使用了前后端分離的方式開(kāi)發(fā)桩砰,脫離了JDBC阶捆,那網(wǎng)絡(luò)請(qǐng)求必不可少凌节,下面選用了比較火熱的OKHTTP,JAVA還有很多其他網(wǎng)絡(luò)請(qǐng)求框架洒试,但是感覺(jué)OKHTTP封裝起來(lái)比較靈活倍奢。

1.Gradle導(dǎo)包

因?yàn)楣こ逃玫腉radle管理工具,需要jar包的可以自己到maven官網(wǎng)下載垒棋。

compile group: 'com.squareup.okhttp3', name: 'okhttp', version: '3.10.0'
compile group: 'com.squareup.okio', name: 'okio', version: '1.14.0'
compile group: 'com.google.code.gson', name: 'gson', version: '2.8.4'

2.建立接口回調(diào)類(lèi)HttpBack

接口回調(diào)類(lèi)用于自定義回調(diào)卒煞,在建立HttpService 時(shí)會(huì)用到

package bccsclient.api;
import okhttp3.Call;
public interface HttpBack {
     void onsucess(Call call,String response);
     void onfail(Call call, String e);
}

3.封裝類(lèi)HttpService

OKHTTP設(shè)置十分靈活大家可以根據(jù)自己需求,修改封裝類(lèi)HttpService

package bccsclient.api;
import bccsclient.util.DialogUtil;
import bccsclient.util.JsonUtil;
import com.google.gson.Gson;
import javafx.application.Platform;
import javafx.scene.control.Alert;
import okhttp3.*;

import java.io.IOException;
import java.util.Map;
import java.util.prefs.Preferences;

/**
 * @Author bb
 * @Create 2018/5/18
 * @Description 網(wǎng)絡(luò)請(qǐng)求封裝類(lèi)
 */
public class HttpService {
private static final MediaType JSON
        = MediaType.parse("application/json; charset=utf-8");
private static String authorizationHead = "";
private volatile static HttpService INSTANCE;
private volatile static Gson gson;
private volatile static OkHttpClient mOkHttpClient;
private static String baseurl;

private HttpService() {
    mOkHttpClient = new OkHttpClient();

    Preferences preferences = Preferences.userRoot().node(Constant.Preferences_Node);
    baseurl = preferences.get("baseurl", "");
    authorizationHead = preferences.get("authorizationHead", "");

}


public static HttpService getInstance() {
    if (INSTANCE == null) {
        synchronized (HttpService.class) {
            if (INSTANCE == null) {
                INSTANCE = new HttpService();
            }
        }
    }
    return INSTANCE;
}


/**
 * 異步get請(qǐng)求
 *
 * @param uri
 * @param map
 * @param callback
 */
public static void httpGet(String uri, Map<String, String> map, HttpBack callback) {

    if (map.size() != 0) {
        uri = uri + "?";
        for (String in : map.keySet()) {
            String str = map.get(in);
            uri = uri + in + "=" + str + "&";
        }
        uri = uri.substring(0, uri.length() - 1);
    }

    Request request = new Request.Builder()
            .addHeader("authorization", authorizationHead)
            .url(baseurl + uri)
            .get().build();
    Call call = mOkHttpClient.newCall(request);
    callListener(call, callback);
}

/**
 * 異步Post鍵值對(duì)請(qǐng)求
 *
 * @param uri
 * @param map
 * @param callback
 */
public static void httpPostMap(String uri, Map<String, String> map, HttpBack callback) {
    FormBody.Builder builder = new FormBody.Builder();
    for (String in : map.keySet()) {
        builder.add(in, map.get(in));
    }
    RequestBody body = builder.build();
    Request request = new Request.Builder()
            .addHeader("authorization", authorizationHead)
            .url(baseurl + uri)
            .post(body).build();
    Call call = mOkHttpClient.newCall(request);
    callListener(call, callback);
}

/**
 * 異步Post Bean請(qǐng)求
 *
 * @param uri
 * @param Bean
 * @param callback
 * @param <T>
 */
public static <T> void httpPostBean(String uri, T Bean, HttpBack callback) {
    RequestBody body = RequestBody.create(JSON, JsonUtil.bean2Json(Bean));
    Request request = new Request.Builder()
            .addHeader("authorization", authorizationHead)
            .url(baseurl + uri)
            .post(body).build();
    Call call = mOkHttpClient.newCall(request);
    callListener(call, callback);


}


public static void callListener(Call call, HttpBack httpBack) {

    call.enqueue(new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {
            Platform.runLater(() -> {
                httpBack.onfail(call, e);
                DialogUtil.createExceptionDialog("警告", "網(wǎng)絡(luò)請(qǐng)求異常", e);
            });
        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {
            if (response.isSuccessful()) {
                try {
                    Object onsucess = httpBack.onsucess(call, response.body().string());
                    Platform.runLater(() -> {
                        httpBack.onsucessView(onsucess);
                    });
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } else {
                Platform.runLater(() -> {
                    httpBack.onfail(call, new Exception(response.message()));
                    DialogUtil.createAlert(Alert.AlertType.WARNING, "網(wǎng)絡(luò)請(qǐng)求失敗" + response.code());
                });
            }
        }
    });
}

}

4.使用HttpService

//http示例1--post
  private void httppost() {

    HttpService.getInstance().httpPostBean("auth", new AuthBean("dengxin", "1"), new HttpBack() {
        @Override
        public Object onsucess(Call call, String response) {
            System.out.println(response);
            return response;
        }

        @Override
        public void onsucessView(Object object) {
            TextArea.setText("請(qǐng)求成功:" + (String) object);
        }

        @Override
        public void onfail(Call call, Exception e) {
            System.out.println("失敗");
            TextArea.setText("請(qǐng)求失數鸺堋:" + e);
        }
    });
}

//http示例2--get請(qǐng)求-帶參數(shù)
   private void httpget3() {
    Map<String, String> map = new HashMap();
    map.put("projid", "P0001");
    HttpService.getInstance().httpGet("main/tops", map, new HttpBack() {
        @Override
        public Object onsucess(Call call, String response) {
            System.out.println(response);
            JsonUtil.json2JSONArray(response);
            return JsonUtil.json2JSONArray(response);
        }

        @Override
        public void onsucessView(Object object) {
            TextArea.setText("請(qǐng)求成功:" + object);

        }

        @Override
        public void onfail(Call call, Exception e) {
            System.out.println("失敗");
            TextArea.setText("請(qǐng)求失斉显!:" + e);
        }
    });
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市乖订,隨后出現(xiàn)的幾起案子扮饶,更是在濱河造成了極大的恐慌,老刑警劉巖乍构,帶你破解...
    沈念sama閱讀 222,464評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件甜无,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡哥遮,警方通過(guò)查閱死者的電腦和手機(jī)岂丘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)眠饮,“玉大人奥帘,你說(shuō)我怎么就攤上這事∫钦伲” “怎么了翩概?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,078評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)返咱。 經(jīng)常有香客問(wèn)我钥庇,道長(zhǎng),這世上最難降的妖魔是什么咖摹? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,979評(píng)論 1 299
  • 正文 為了忘掉前任评姨,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘吐句。我一直安慰自己胁后,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,001評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布嗦枢。 她就那樣靜靜地躺著攀芯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪文虏。 梳的紋絲不亂的頭發(fā)上侣诺,一...
    開(kāi)封第一講書(shū)人閱讀 52,584評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音氧秘,去河邊找鬼年鸳。 笑死,一個(gè)胖子當(dāng)著我的面吹牛丸相,可吹牛的內(nèi)容都是我干的搔确。 我是一名探鬼主播,決...
    沈念sama閱讀 41,085評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼灭忠,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼膳算!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起弛作,我...
    開(kāi)封第一講書(shū)人閱讀 40,023評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤畦幢,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后缆蝉,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,555評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡瘦真,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,626評(píng)論 3 342
  • 正文 我和宋清朗相戀三年刊头,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诸尽。...
    茶點(diǎn)故事閱讀 40,769評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡原杂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出您机,到底是詐尸還是另有隱情穿肄,我是刑警寧澤,帶...
    沈念sama閱讀 36,439評(píng)論 5 351
  • 正文 年R本政府宣布际看,位于F島的核電站咸产,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏仲闽。R本人自食惡果不足惜脑溢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,115評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望赖欣。 院中可真熱鬧屑彻,春花似錦验庙、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,601評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至搏恤,卻和暖如春违寿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背挑社。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,702評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工陨界, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人痛阻。 一個(gè)月前我還...
    沈念sama閱讀 49,191評(píng)論 3 378
  • 正文 我出身青樓菌瘪,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親阱当。 傳聞我的和親對(duì)象是個(gè)殘疾皇子俏扩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,781評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,318評(píng)論 25 707
  • 今天下午有一場(chǎng)特別的見(jiàn)面。 源于自己認(rèn)識(shí)的一位老鄉(xiāng)弊添,我內(nèi)心帶著互相拓展的想法录淡,權(quán)當(dāng)見(jiàn)一面認(rèn)識(shí)一下。當(dāng)然在認(rèn)...
    尹莎閱讀 221評(píng)論 0 1
  • 燈紅酒綠的城市里油坝,喧嘩熱鬧的街市上嫉戚,一路上人來(lái)人往,回家的澈圈、工作的彬檀、玩樂(lè)的……各式各樣的人,都在為了什么而行走著瞬女。...
    朗月笑長(zhǎng)空閱讀 516評(píng)論 0 0
  • 很多時(shí)候的所謂堅(jiān)強(qiáng)和獨(dú)立窍帝,并不是個(gè)性使然,而是別無(wú)選擇诽偷。 回想來(lái)時(shí)的路坤学,那么多次的低沉、無(wú)助报慕,甚至窮迫深浮,但都一聲不...
    不吃深海魚(yú)的喵閱讀 278評(píng)論 0 0
  • 今天趕在中午去理了發(fā)。 之所以要中午去理發(fā)眠冈,因?yàn)轳R上就要過(guò)年略号,一旦臘月二十不理發(fā),此后每天都會(huì)漲價(jià),直到正月初一玄柠。...
    烏卓閱讀 475評(píng)論 1 6