安高

作者: 魔女小姐的猫 | 来源:发表于2020-04-23 11:06 被阅读0次

一. OkHttp

  1. 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();
                    }
                });
            }
        });
    
    
  2. 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());
                    }
                });
            }
        });
  1. 请求体 (4种方式)
    ①. Form(表单):FormBody.builder().build();
    ②. String(字符串):RequestBody.create(MediaType," ");
    ③. Steam(流):new RequestBody();
    ④. File (文件):

  2. 请求体,缓存,超时
    ①. 请求体: 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

  1. Retrofit使用步骤:
    ①. 到依赖,加网路权限
    依赖 Retrofit : implementation 'com.squareup.retrofit2:retrofit:2.5.0'
    依赖 Retrofit.converter implementation '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) {

            }
        });
  1. 常用注解
    ①. 请求方式
get               
post

②. 参数

field
fieldMap
query
queryMap

③. 请求头

FormURLEncoded 用表单数据提交,搭配参数使用
Header :头
headers : 方法

④. 请求路径

path   替换路径
url  路径拼接

⑤. 请求体

body 设置请求体,结合post使用

三. 数据库 :MySql,Oracle,Sqlite

  1. 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

  1. 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 --> 生成数据库文件的目录;
  1. 双检索 单例模式:获取表对象
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);
    }
}

  1. 获取整个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();
  1. 编译 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懒加载

相关文章

  • 安高

    一. OkHttp Ok get异步请求①. 到依赖,加网路权限依赖 OkHttp: implementatio...

  • 返程

    六安返回临泉,高铁

  • 2018-06-14

    Who are you——高恩星&韩以安 “韩以安,你看清楚了。我不是小时候地高恩星。我们长大了很多,变了很...

  • 【原创】菊(二首)

    (一)赏菊 文/高付安 寒露迎风开, 窗前暗香来。 合砚赏菊花, 黄蕊是谁裁? (二)咏菊 文/高付安 铁骨黄布衫...

  • 咏合安高铁

    游子满怀羁旅韵 归鸿漫听故园声 八皖风光凝醉眼 诗情画意见峥嵘

  • 微诗●冬韵

    (一)雪 文/高付安 风拥吻雪花 饱蘸情话 飘落心酒缕缕醇香 (二)冬日暖阳 文/高付安 冬的老城 阳光下入梦 等...

  • 北京雄安将与太原连通

    这是个令人振奋的好消息!北京雄安到忻州高铁正在规划!如果雄忻高铁建成通车,从太原到雄安高铁运行时长仅一个半小时!如...

  • 修心

    心静者高 高者俯瞰世界心和者仁 仁者包容万物心慈者深 深者淡对冷暖心慧者安 安者笑看人生

  • 十部书籍简介

    1、《狂飙》简介: 2000年,意气风发的刑警安欣与倍受欺负的鱼贩子高启强相识,而后随着高启强逐渐偏离正途,安欣意...

  • 《中华高姓大通谱·六安怀德堂高氏支谱》颁谱 庆典暨六霍怀德堂高氏

    《中华高姓大通谱·六安怀德堂高氏支谱》颁谱 庆典暨六霍怀德堂高氏宗亲联谊会成立大会在六安隆重举行 渤海郡望绵世泽,...

网友评论

      本文标题:安高

      本文链接:https://www.haomeiwen.com/subject/najoihtx.html