使用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()方法. ...
随机推荐
- JDK1.8 HashMap学习
1:源码分析 1.1:构造方法 public HashMap(int initialCapacity, float loadFactor) { ) throw new IllegalArgumentE ...
- Day 6:Vector类和实现Hashset以及登录窗口的模拟
LinkedList作业:生成扑克牌并且洗牌? import java.util.*; class Poker{ String color; String number; public Poker(S ...
- java Kafka 简单应用实例
kafka官方中文文档 http://kafka.apachecn.org/ java Kafka 简单应用实例 下面是Linux下的单机模式:https://blog.csdn.net/fct2 ...
- CodeForces - 446A DZY Loves Sequences(dp)
题意:给定一个序列a,求最长的连续子序列b的长度,在至多修改b内一个数字(可修改为任何数字)的条件下,使得b严格递增. 分析: 1.因为至多修改一个数字,假设修改a[i], 2.若能使a[i] < ...
- POJ 3050:Hopscotch
Hopscotch Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2506 Accepted: 1784 Descrip ...
- 【无网条件下】Linux系统、jdk、redis及集群、rabbitmq、nginx、weblogic和oracle安装及配置
本篇文章为原创,仅供参考使用,如果需要文章中提到的所有软件安装包和依赖包(即data),请以博客园邮箱联系获取链接. 准备资料 软件 主要软件包版本 路径 系统镜像 CentOS-6.10-x86_6 ...
- vue form 验证
vue 验证 <Form :model="formModel" label-position="center" :label-width="90 ...
- 2.react 基础 - create-react-app 目录结构 及 组件应用
1. react-app 脚手架的 目录结构 node_modules -d 存放 第三方下载的 依赖的包 public -d 资源目录 favicon.ico - 左上角的图标 index.h ...
- 为什么常用 Map<> map = new HashMap()
在初学Java的时候,经常能看到教材上的写法,使用了接口Map来引用一个map,而不是它的具体实现,那么这样做的好处是什么呢? <Effective Java>第52条:通过接口引用对象 ...
- Spring Cloud Alibaba 教程 | Nacos(五)
扩展配置(extended configurations) 通过之前的学习,我们知道应用引入nacos配置中心之后默认将会加载Data ID= ${prefix} - ${spring.profile ...