javafx 五、网络请求
添加jar包
去mave仓库中下载jar包
注意:okio包要下载1版本的,2版本的会报错,有个类找不到
封装网络请求
package sample.utils;import com.alibaba.fastjson.JSONObject;
import okhttp3.*;import java.io.IOException;
import java.lang.reflect.Proxy;
import java.util.Map;public class HttpUtil {private static String PrefixURL = "xxx"; // //public static String uri_login="xxx";private final OkHttpClient mOkHttpClient;private volatile static HttpUtil INSTANCE;public HttpUtil() {mOkHttpClient = new OkHttpClient();}public static HttpUtil getInstance() {if (INSTANCE == null) {synchronized (HttpUtil.class) {if (INSTANCE == null) {INSTANCE = new HttpUtil();}}}return INSTANCE;}public void get(String json,String uri,HttpCallBack callBack){Request request = new Request.Builder().addHeader("Content-Type","application/json; charset=utf-8").url(PrefixURL + uri).get().build();Call call = mOkHttpClient.newCall(request);call.enqueue(new Callback() {@Overridepublic void onFailure(Call call, IOException e) {System.out.println("IOException>>"+e.toString());}@Overridepublic void onResponse(Call call, okhttp3.Response response) throws IOException {System.out.println("response>>"+response.body());}});}public void post(Map<String,String> map, String uri, HttpCallBack 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("Content-Type","application/json; charset=utf-8").url(PrefixURL + uri).post(body).build();Call call = mOkHttpClient.newCall(request);call.enqueue(new Callback() {@Overridepublic void onFailure(Call call, IOException e) {}@Overridepublic void onResponse(Call call, okhttp3.Response response) throws IOException {boolean successful = response.isSuccessful();if(successful){
// callBack.success(response.body().string());String success = response.body().string();JSONObject jsonObject=JSONObject.parseObject(success);Boolean aBoolean = jsonObject.getBoolean("success");if(aBoolean){JSONObject data = jsonObject.getJSONObject("data");callBack.success(data.toJSONString());}else{String message = jsonObject.getString("message");if(StringUtil.isEmpty(message)){callBack.fail("请求失败");}else{callBack.fail(message);}}}else{callBack.fail("请求失败");}}});}
}
请求回调
package sample.utils;public interface HttpCallBack {void success(String success);void fail(String fail);
}
调用网络请求
HashMap<String,String> hashMap=new HashMap<>();hashMap.put("username",userNameText);hashMap.put("password",passwordText);HttpUtil.getInstance().post(hashMap, HttpUtil.uri_login, new HttpCallBack() {@Overridepublic void success(String success) {
// System.out.println("success>>"+success);saveUserNameAndPassword(userNameText,passwordText);saveSuccessData(success);Platform.runLater(new Runnable() { //主线程中完成 切换线程,否则会报错@Overridepublic void run() {JFXSnackbar snackbar = new JFXSnackbar(root_view);snackbar.fireEvent(new JFXSnackbar.SnackbarEvent(new JFXSnackbarLayout("登录成功")));FXMLLoader loader = new FXMLLoader();loader.setLocation(Main.class.getResource("view/main.fxml")); //静态读取,无法获取controllertry {GridPane rootLayout = loader.load();Rectangle2D primaryScreenBounds = Screen.getPrimary().getVisualBounds(); //设置全屏Scene scene = new Scene(rootLayout, primaryScreenBounds.getMaxX(), primaryScreenBounds.getMaxY());primaryStage.setMaximized(true);primaryStage.setScene(scene); //设置新界面} catch (IOException e) {e.printStackTrace();}}});}@Overridepublic void fail(String fail) {Platform.runLater(new Runnable() { //主线程中完成@Overridepublic void run() {JFXSnackbar snackbar = new JFXSnackbar(root_view);snackbar.fireEvent(new JFXSnackbar.SnackbarEvent(new JFXSnackbarLayout(fail)));}});}});}
保存数据的方法
/*** 保存登录成功的数据,这里将数据保存到Properties文件中,方式如下保存用户名密码类似* @param success*/private void saveSuccessData(String success) {}
保存用户名密码
/*** 记住密码*@param loginName* @param passWord*/private void saveUserNameAndPassword(String loginName, String passWord) {Properties prop = new Properties();try {FileOutputStream oFile = new FileOutputStream("user.properties", false);prop.setProperty(loginName, passWord);prop.store(oFile, null);oFile.close();} catch (Exception e) {e.printStackTrace();}}/*** 还原密码*/public void initialize() {Properties prop = new Properties();try {File file = new File("user.properties");boolean exists = file.exists();if (exists) {InputStream in = new BufferedInputStream(new FileInputStream("user.properties"));prop.load(in);Iterator<String> it = prop.stringPropertyNames().iterator();while (it.hasNext()) {String key = it.next();userName.setText(key);password.setText(prop.getProperty(key));}in.close();}} catch (Exception e) {e.printStackTrace();}}
结果
点击登录后,成功,跳转到新的界面
javafx 五、网络请求相关推荐
- Vue(五)Vue中的网络请求(使用Vue脚手架发送Axios请求)
一.Axios 1.定义:利用ES6提供的Promise方式,把AJAX进行了封装.我们在Vue中发送网络请求,基本上就是使用Axios 需要安装第三方的Axios模块,才能使用 ...
- iOS 中的网络请求 (同步请求、异步请求、GET请求、POST请求)
1.同步请求可以从因特网请求数据,一旦发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进行下一步操作, 2.异步请求不会阻塞主线程,而会建立一个新的线程来操作,用户发出异步请求后,依然 ...
- 如何独立开发一个网络请求框架
(原创出处为本博客:http://www.cnblogs.com/linguanh/) 目录: 前言 准备工作 开发模式 开发原则 线程 高并发 TCP/UDP 本类介绍 开发选择 功能列表 ...
- Anroid-async-http封装网络请求框架源码分析
Android-async-http开源项目可以是我们轻松的获取网络数据或者向服务器发送数据,使用起来非常简单, 这个网络请求库是基于Apache HttpClient库之上的一个异步网络请求处理库, ...
- 一款基于RxJava2+Retrofit2实现简单易用的网络请求框架
本库是一款基于RxJava2+Retrofit2实现简单易用的网络请求框架,结合android平台特性的网络封装库,采用api链式调用一点到底,集成cookie管理,多种缓存模式,极简https配置, ...
- ajax jq 图片上传请求头_全面分析前端的网络请求方式:Ajax ,jQuery ,axios,fetch
链接:https://juejin.im/post/5c9ac607f265da6103588b31 一.前端进行网络请求的关注点 大多数情况下,在前端发起一个网络请求我们只需关注下面几点: 传入基本 ...
- android retrofit2.0 rxjava2,Android - 网络请求之 Retrofit2 + RxJava
老婆保佑,代码无BUG 目录 引用 与其他开源请求库对比 Retrofit注解 使用 GET请求 POST请求 Retrofit2 + RxJava 基础使用 优化 封装Retrofit2 + RxJ ...
- Java生鲜电商平台-SpringCloud微服务架构中网络请求性能优化与源码解析
Java生鲜电商平台-SpringCloud微服务架构中网络请求性能优化与源码解析 说明:Java生鲜电商平台中,由于服务进行了拆分,很多的业务服务导致了请求的网络延迟与性能消耗,对应的这些问题,我们 ...
- iOS网络请求认证挑战
一.引言 Http请求中认证挑战相关的代理如下: 1.将要发送一个认证挑战的请求 - connection:willSendRequestForAuthenticationChallenge: 2.是 ...
- java http 异步请求框架_GitHub - huangdali/MyHttpUtils: 一个非常好用的异步网络请求框架...
轻量级网络请求框架MyHttputils 一.前言 本版代码大换血,使用了策略模式和构造模式来组织代码,增加了更加人性化的请求构造,代码质量提高.效率显著提升.(但是使用风格基本没变哦) 2.0.2版 ...
最新文章
- Algorand 共识算法 BA* 入门
- Docker容器的生命周期管理
- mac下android环境搭建笔记(android studio)
- Jin Ge Jin Qu hao UVA - 12563 (劲歌金曲)01背包,求装入的东西最多(相同多时价值大)
- win10 解决升级 WordPress 时提示”另一更新正在进行”
- kafka exporter v0.3.0 发布: Prometheus官方推荐,欢迎试用
- 百世快递收到纽交所退市警告!国内业务已68亿“卖身”
- Tomcat下载与安装
- Excel文件输出到浏览器
- U盘刻录ubuntu系统
- windows10系统瘦身记
- 看完即会,抓取微信小程序数据包教程
- 局域网内如何把文件夹共享
- 小米电视看普通电视台,只需几步就能轻松解锁
- 360cdn能挡住cc攻击_揭秘为何使用CDN后一但被cc攻击网站就瘫痪的真正原因?
- pytorch实现word_embedding(negative_sampling的skip-gram模型)
- Scratch 被禁止访问;Linux 内核历史报告2020 等开源之道每周评论2020 09 15
- raft 有关竞选超时 vs 心跳超时的疑惑
- 洛谷-P2198 杀蚂蚁
- 奥运会男篮赛场上,命中率最高的是机器人?
热门文章
- 上升沿判断语句_股票上升趋势中回调买入技巧,强势股顺势横盘突破买入法
- Lesson 12 Goodbye and good luck 再见,一路顺风
- 第四周-C语言 圆柱体表面积计算
- 10月20日前!武汉市科技成果转化中试平台(基地)备案申报条件及流程梳理
- 跨站点请求伪造攻击的原理及防御
- 网页游戏的项目设计方案分享
- 一些框架图的色彩搭配
- python图表导入word_使用python matplotlib 画图导入到word中如何保证分辨率
- [建筑设计].TLF-SOFT-SOFTPLAN.V13.33.bin Flaresim
- 机器学习之One-Hot Encoding详解