使用okhttp连接网络,再把数据储存进Sqlite
这次会把所有之前学过的东西应用在一起,写一个登入的功能。
1. Activity调用CONFIG,获得URL后
2. Activity再调用Okhttp,从服务器返回JSON
3. Activity调用GsonTools,把JSON转换成<List>DTO
4. Activity调用DAO的get、set方法,把叁数<List>DTO传到方法
5. DAO继承DbHelper,把<List>DTO储存到Sqlite
以下是部份代码的精要
1. Activity初始化GsonTools、OkHttp、DAO。
private OkHttp okhttp;
private GsonTools gsonTools;
private BitMap bitMap;
private UserDAO userDAO; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_login); okhttp = OkHttp.getInstance();
gsonTools = GsonTools.getInstance();
bitMap = BitMap.getInstance();
userDAO = new UserDAO(this); initUI();
isHavingUserInSqlite();
}
2. 必须在新线程下调用Okhttp,而在该线程下想刷新UI,必须用runOnUiThread()。
// Network thread
new Thread(new Runnable() {
@Override
public void run() { // run your code here // UI Thread
LoginActivity.this.runOnUiThread(new Runnable() {
public void run() {
// ui
}
}); }
}).start();
3. 最核心的业务都在这里。
private void validUser() {
// Network thread
new Thread(new Runnable() {
@Override
public void run() {
ResultDTO resultDTO; // check weather user is exist?
userExistURL = Configuration.isUserExistURL(userName, userPassword);
userExistResult = okhttp.getResponse(userExistURL);
resultDTO = gsonTools.getLogin(userExistResult); // get user info if user is exist
if ( resultDTO.getResult().equals("1") ) {
userGetURL = Configuration.getUserURL(resultDTO.getId());
userResult = okhttp.getResponse(userGetURL);
userDTO = gsonTools.getUser(userResult); // save user info into SQlite
if ( userDAO.setUser(userDTO) )
{
intent = new Intent(LoginActivity.this, MainActivity.class);
startActivity(intent);
}
} else {
loginMsg = "密碼或帳號不正確";
} // UI Thread
LoginActivity.this.runOnUiThread(new Runnable() {
public void run() {
tvLoginResult.setText(loginMsg);
}
}); }
}).start();
}
使用okhttp连接网络,再把数据储存进Sqlite的更多相关文章
- 在Android开发中如何判读当前设备是否连接网络
1:前言: 我们在Android开发的过程中,很多实现是要向远程服务器拿数据的,但是未必当前设备一定连接了网络啊,那么此时我们就是要进行判断的了, 如果是有网络的话,那么此时就去向远程服务器去拿数据, ...
- python网络爬虫-数据储存(七)
数据储存 主要介绍两种数据储存方法: 储存在文件中,包括text文件和csv文件 存储在数据库中,包括MySQL关系型数据库和mongoDB数据库 存储到txt title = "第一个文本 ...
- Dual Path Networks(DPN)——一种结合了ResNet和DenseNet优势的新型卷积网络结构。深度残差网络通过残差旁支通路再利用特征,但残差通道不善于探索新特征。密集连接网络通过密集连接通路探索新特征,但有高冗余度。
如何评价Dual Path Networks(DPN)? 论文链接:https://arxiv.org/pdf/1707.01629v1.pdf在ImagNet-1k数据集上,浅DPN超过了最好的Re ...
- 面试题汇总--数据储存/应用程序/UI控件/客户端的安全性与框架处理。。。
一 数据储存 1.如果后期需要增加数据库中的字段怎么实现,如果不使用 CoreData 呢?编写 SQL 语句来操作原来表中的字段1)增加表字段ALTER TABLE 表名 ADD COLUMN 字 ...
- Retrofit + RxJava + OkHttp 让网络请求变的简单-基础篇
https://www.jianshu.com/p/5bc866b9cbb9 最近因为手头上的工作做完了,比较闲,想着做一些优化.看到以前用的那一套网络框架添加一个请求比较麻烦,并且比较难用,所以想改 ...
- Android Volley 库通过网络获取 JSON 数据
本文内容 什么是 Volley 库 Volley 能做什么 Volley 架构 环境 演示 Volley 库通过网络获取 JSON 数据 参考资料 Android 关于网络操作一般都会介绍 HttpC ...
- keras搭建密集连接网络/卷积网络/循环网络
输入模式与网络架构间的对应关系: 向量数据:密集连接网络(Dense层) 图像数据:二维卷积神经网络 声音数据(比如波形):一维卷积神经网络(首选)或循环神经网络 文本数据:一维卷积神经网络(首选)或 ...
- Snail—iOS网络学习之得到网络上的数据
在开发项目project中,尤其是手机APP,一般都是先把界面给搭建出来.然后再从网上down数据 来填充 那么网上的数据是怎么得来的呢,网络上的数据无非就经常使用的两种JSON和XML 如今 大部分 ...
- Android之三种网络请求解析数据(最佳案例)
AsyncTask解析数据 AsyncTask主要用来更新UI线程,比较耗时的操作可以在AsyncTask中使用. AsyncTask是个抽象类,使用时需要继承这个类,然后调用execute()方法. ...
随机推荐
- WEB一周总结(1)待补充
1.网页设计作业--小组介绍 图片来自https://weibo.com/hxLMo?sudaref=www.baidu.com&display=0&retcode=6102 2.WE ...
- JavaWeb之搭建自己的MVC框架(一)
1. 介绍 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离的 ...
- 51nod 1284:2 3 5 7的倍数 容斥原理
1284 2 3 5 7的倍数 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 收藏 关注 给出一个数N,求1至N中,有多少个数不是2 3 5 7的倍数. 例如N ...
- Cassandra--Cassandra 安装
当前最新版本:3.11.3 https://cassandra.apache.org/doc/latest/getting_started/installing.html 前提条件 安装Java8. ...
- git登录账号密码错误remote: Incorrect username or password (access token)
git提交时弹框让输入用户和密码,不小心输入错误了 再次提交 一直就提示 remote: Incorrect username or password 错误了,也不弹框要重新输入 解决方法 win1 ...
- CSS3新特性—animate动画
1.animate介绍 1. @keyframes 自定义动画名称 { from { } to { } } 2. 通过动画名称调用动画集 animation-name: 动画集名称. 3. 属性介绍: ...
- SQL基础教程(第2版)第7章 集合运算:练习题
可能有些读者会对此感到惊讶:“同时使用 UNION 和 INTERSECT 时,不是 INTERSECT 会优先执行吗?”当然,从执行顺序上来说确实是从 INTERSECT 开始的, 但是在此之前,由 ...
- Corporative Network (有n个节点,然后执行I u,v(把u的父节点设为v)和E u(询问u到根节点的距离))并查集
A very big corporation is developing its corporative network. In the beginning each of the N enterpr ...
- linux 解压命令总结
常用Linux 命令: [转自]https://www.jianshu.com/p/ca41f32420d6 解压缩 .tar 解包:tar xvf FileName.tar 打包:tar cvf F ...
- 生成随机数(Random类)和获取用户输入(Scanner类)
生成指定范围内的随机数 Math.random() 生成随机数,随机数在0到1之间,类型是 double. public class randCase { public static void mai ...