一. OkHttp
- Ok get异步请求
①. 到依赖,加网路权限
依赖 OkHttp:implementation 'com.squareup.okhttp3:okhttp:3.12.0'
权限:<uses-permission android:name="android.permission.INTERNET"/>
②. 创建OkHttpClient 对象
③. 构建request(请求)对象
④. 获取Call对象
⑤. call执行请求//创建OKHttpCLient对象 OkHttpClient okHttpClient = new OkHttpClient.Builder() .connectTimeout(5, TimeUnit.SECONDS) .readTimeout(5,TimeUnit.SECONDS) .writeTimeout(5,TimeUnit.SECONDS) .cache(new Cache(new File(getCacheDir(),"cache"), 10*1024*1024)) .build(); //构建请求对象 final Request request = new Request.Builder() .addHeader("Content_Type","application/x-www-from-urlencoded;charset = utf-8") .header("Usee-Agent","an Ok") .url(Arrayurl) .get() .build(); //获取Call对象 Call call = okHttpClient.newCall(request); //call执行请求 call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { //请求失败 Toast.makeText(MainActivity.this, "请求失败", Toast.LENGTH_SHORT).show(); } @Override public void onResponse(Call call, Response response) throws IOException { Log.i("tag", "网址" + Thread.currentThread().getName()); Log.i("tag", "响应行"+response.protocol()+" "+response.code()+" "+response.message()); //获取Json String string = response.body().string(); Headers headers = response.headers(); final List<ArrayBean> list = new Gson().fromJson(string, new TypeToken<List<ArrayBean>>() { }.getType()); for (int i = 0; i < headers.size(); i++) { Log.i("tag", headers.name(i)+" "+headers.value(i)); } //切换子线程 runOnUiThread(new Runnable() { @Override public void run() { btn_get_en.setText(list.get(1).getName()); rvlist.addAll(list); rvAdapter.notifyDataSetChanged(); } }); } });
- Ok post异步请求
①. 到依赖,加网路权限
依赖:implementation 'com.squareup.okhttp3:okhttp:3.12.0'
权限:<uses-permission android:name="android.permission.INTERNET"/>
②. 创建OkHttpClient 对象
③. 创建请求体(Steam 流)
④. 构建request(请求)对象
⑤. 获取Call对象
⑥. call执行请求
OkHttpClient okHttpClient = new OkHttpClient.Builder().build();
RequestBody build = new RequestBody() {
@Override
public MediaType contentType() {
return MediaType.parse("application/x-www-from-urlencoded;charset = utf-8)");
}
@Override
public void writeTo(BufferedSink sink) throws IOException {
sink.writeUtf8("stage_id=1&limit=20&page=1");
}
};
Request build1 = new Request.Builder()
.url(Footurl)
.post(build)
.build();
Call call = okHttpClient.newCall(build1);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String json = response.body().string();
final FootBean footBean = new Gson().fromJson(json, FootBean.class);
runOnUiThread(new Runnable() {
@Override
public void run() {
Log.i("tag", "" + footBean.getData().size());
btn_post_en.setText(footBean.getData().get(0).getTitle());
}
});
}
});
-
请求体 (4种方式)
①. Form(表单):FormBody.builder().build();
②. String(字符串):RequestBody.create(MediaType," ");
③. Steam(流):new RequestBody();
④. File (文件): -
请求体,缓存,超时
①. 请求体:reques.header()
reques.addHeader()
②. 缓存:okHttpClient.cache(new Cache(new File(getCacheDir(),"cache"), 10*1024*1024))
③. 超时:okHttpClient .connectTimeout(5, TimeUnit.SECONDS) .readTimeout(5,TimeUnit.SECONDS) .writeTimeout(5,TimeUnit.SECONDS)
二. Retrofit
- Retrofit使用步骤:
①. 到依赖,加网路权限
依赖 Retrofit :implementation 'com.squareup.retrofit2:retrofit:2.5.0'
依赖 Retrofit.converterimplementation 'com.squareup.retrofit2:converter-gson:2.5.0'
依赖 Gson:implementation 'com.google.code.gson:gson:2.2.4'
权限: <uses-permission android:name="android.permission.INTERNET"/>
②. 创建接口服务类:NaseURL和方法
③. 创建Retrofit对象
④. 通过Retrofit对象获取接口服务对象
⑤. 接口服务对象调用自己的方法,获得Call对象
⑥. 通过call执行请求
接口服务类
package com.example.day422work.service;
import com.example.day422work.bean.FootBean;
import retrofit2.Call;
import retrofit2.http.GET;
public interface ApiService {
String url = "http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=20&page=1";
String BaseUrl = "http://www.qubaobei.com/ios/cf/";
@GET("dish_list.php?stage_id=1&limit=20&page=1")
Call<FootBean>get();
}
Retrofit
//创建Retrofit对象
Retrofit retrofit = new Retrofit.Builder()
//添加ConverterFactory依赖
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(ApiService.BaseUrl)
.build();
//通过Retrofit对象获取接口服务对象
ApiService apiService = retrofit.create(ApiService.class);
//接口服务对象调用自己的方法,获得Call对象
Call<FootBean> call = apiService.get();
//通过call执行请求
call.enqueue(new Callback<FootBean>() {
@Override
public void onResponse(Call<FootBean> call, Response<FootBean> response) {
List<FootBean.DataBean> data = response.body().getData();
list.addAll(data);
rvAdapter.notifyDataSetChanged();
}
@Override
public void onFailure(Call<FootBean> call, Throwable t) {
}
});
- 常用注解
①. 请求方式
get
post
②. 参数
field
fieldMap
query
queryMap
③. 请求头
FormURLEncoded 用表单数据提交,搭配参数使用
Header :头
headers : 方法
④. 请求路径
path 替换路径
url 路径拼接
⑤. 请求体
body 设置请求体,结合post使用
三. 数据库 :MySql,Oracle,Sqlite
-
SQL语句分类
①. DDL数据定义语言
用于创建、修改、和删除数据库内的数据结构,如:
1.创建和删除数据库(CREATE DATABASE || DROP DATABASE);
2.创建、修改、重命名、删除表(CREATE TABLE || ALTER TABLE|| RENAME TABLE||DROP TABLE);
3.创建和删除索引(CREATEINDEX || DROP INDEX)②. DML数据操作语言
修改数据库中的数据,包括插入(INSERT)、更新(UPDATE)和删除(DELETE)③. DCL数据控制语言
用于对数据库的访问,如:1:给用户授予访问权限(GRANT);2:取消用户访问权限(REMOKE)④. DQL数据查询语言
从数据库中的一个或多个表中查询数据(SELECT)
2.SQL语句
(1)库
create database aaa; //创建数据库
drop database aaa; //删除数据库
use aaa; //切换使用数据库
show databases; //显示数据库
(2)表
create table abc(name text,sex varchar(100),age int(10));//创建表结构
drop table abc; //删除表
desc abc; //显示表结构
(3)数据
insert into abc(name,sex,age) values('abc','nan',20); //插入数据
update abc set age = 101 【where name = 'abc'】 //更改数据
delete from abc 【where name = 'abc'】 //删除数据
select * from abc 【where age > 18】 //查询数据
(4)约束
主键: primary key
自增: auto_increment
非空: not null
唯一: unique
create table abc(
id int primary key auto_increment, 主键自增
name varchar not null unique, 非空唯一
sex varchar,
);
(5)查询
Ⅰ、基本查询
select * from emp;
select empno,ename,sal from emp;
select distinct deptno from emp;
select sal*1.5 from emp;
select concat('$',sal) from emp;
select concat(sal,'RMB') from emp;
select ifnull(comm,0)+1000 from emp;
select sal as 奖金 from emp;
Ⅱ、条件查询
select * from emp where deptno = 20;
select * from emp where deptno != 20;
select * from emp where sal >=20000;
select * from emp where sal >=10000 and sal <=20000;
select * from emp where sal<=10000 or sal >=40000;
select * from emp where comm is null;
select * from emp where comm is not null;
select * from emp where sal between 20000 and 40000;
select * from emp where deptno in(10,30);
Ⅲ、模糊查询 _某一个字符 %多个字符
```
select * from emp where ename like '张_';
select * from emp where ename like '张%';
select * from emp where ename like '_一_';
```
Ⅳ、排序
```
select * from emp order by sal asc;
select * from emp order by sal desc;
```
Ⅴ、聚合函数
```
select max(sal) from emp;
select min(sal) from emp;
select count(ename) from emp;
select sum(sal) from emp;
select avg(sal) from emp;
```
Ⅵ、分组
select deptno,count(ename) from emp group by deptno;
四. GreenDao
- GreenDao配置依赖
①. 工程配置:添加插件 更好支持GreenDao
buildscript {
repositories {
jcenter()
mavenCentral() // 添加的代码
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.3'
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin
}
}
②. 项目配置:添加插件
apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao' // apply plugin
③. 项目配置:添加依赖
dependencies {
//greendao
implementation 'org.greenrobot:greendao:3.2.2' // add library
}
④. 初始化GreenDao配置
greendao{
schemaVersion 1 //数据库版本号
daoPackage 'com.example.lizhengjun.dao' //数据库全路径
targetGenDir 'src/main/java' //存放位置
}
schemaVersion--> 指定数据库schema版本号,迁移等操作会用到;
daoPackage --> dao的包名,包名默认是entity所在的包;
targetGenDir --> 生成数据库文件的目录;
- 双检索 单例模式:获取表对象
package com.example.day425;
import com.example.day425.dao.DaoMaster;
import com.example.day425.dao.DaoSession;
import com.example.day425.dao.StudenBeanDao;
import java.util.List;
public class DBHelper {
private static DBHelper Instance;
private final StudenBeanDao studenBeanDao;
//单例双检索
public static DBHelper getInstance() {
if (Instance == null) {
synchronized (DBHelper.class){
if (Instance == null) {
Instance = new DBHelper();
}
}
}
return Instance;
}
private DBHelper() {
//1.创建数据库
DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(GreenDaoApplication.getApp(), "studio");
//2.获取读写对象
DaoMaster daoMaster = new DaoMaster(devOpenHelper.getWritableDb());
//3.获取管理器类
DaoSession daoSession = daoMaster.newSession();
//4.获取表对象
studenBeanDao = daoSession.getStudenBeanDao();
}
//增
public void insert(StudenBean studenBean ){
studenBeanDao.insertOrReplace(studenBean);
}
//删
public void delete(StudenBean studenBean){
studenBeanDao.delete(studenBean);
}
//查
public List<StudenBean> queryAll(){
List<StudenBean> list = studenBeanDao.queryBuilder().list();
return list;
}
//改
public void updata(StudenBean studenBean){
studenBeanDao.update(studenBean);
}
}
- 获取整个App的上下文
package com.example.day425;
import android.app.Application;
public class GreenDaoApplication extends Application {
private static GreenDaoApplication app;
@Override
public void onCreate() {
super.onCreate();
app = this;
}
public static GreenDaoApplication getApp() {
return app;
}
}
需要注意:必须在AndroidManifest.xml文件完成配置 <application android:name=".App"> </application>
4.使用GreenDao实现 增删改查
DBHelper.getInstance().updata(new StudenBean(Long.parseLong(split[0]), split[1], split[2]));
DBHelper.getInstance().delete(new StudenBean(Long.parseLong(split[0]), split[1], split[2]));
DBHelper.getInstance().updata(new StudenBean(Long.parseLong(split[0]), split[1], split[2]));
List<StudenBean> list = DBHelper.getInstance().queryAll();
- 编译 make+project
数据库升级;
(1)复制MigrationHelper到项目,主要通过创建一个临时表,将旧表的数据迁移到新的表中
(2)新建一个类,继承DaoMaster.DerOpenHelper,重写 onUpgeradeDatabase db,int oldVersion,int neVersion()方法,在该方法中使用MigrationHelper进行数据库升级以及数据迁移
然后使用MyOPenHelper替代DapMaster.DerOpenHelper来进行创建数据库等操作
(3)在表实体中,调整其中的变量(表字段),一般就是新增/删除/修改字段,将原本自动生成的构造方法以及set/get方法删除,重写bulide–Make project进行生成
(4)修改Module下build.gradle中数据库的版本号schemaVersion ,递增加1,最后运行app
6.收藏项目
(1)添加依赖 权限
(2)配置GreenDao 创建工具类DbHelper
(3)实现TVF
(4)实现HomeFragment网络列表,包含retrofit使用,点击事件,插入数据
(5)实现CollectionFragment 包含查询数据 viewPager结合Fragment懒加载
网友评论