jedis入门教程

1 jedis介绍

2 java连接Redis

1 导入jar包

2 连接实例

@Test
    //获得单一的jedis对象操作数据库
    public void test1(){

        //1、获得连接对象  设置ip地址和端口
        Jedis jedis = new Jedis("192.168.204.128", 6379);

        //2 、设置数据
        jedis.set("name", "zhangsan");

        //3 获得数据
        String name = jedis.get("name");
        System.out.println(name);

        //4 释放资源
        jedis.close();
    }

3 连接超时问题的处理

也可以直接使用下面的命令:开启端口的远程访问。

/sbin/iptables -I INPUT -p tcp --dport 6379 -j ACCEPT

/etc/rc.d/init.d/iptables save

4 通过连接池获得连接

//通过jedis的pool获得jedis连接对象
    @Test
    public void test2(){
        //0、创建池子的配置对象
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxIdle(30);//最大闲置个数
        poolConfig.setMinIdle(10);//最小闲置个数
        poolConfig.setMaxTotal(50);//最大连接数

        //1、创建一个redis的连接池
        JedisPool pool = new JedisPool(poolConfig, "192.168.186.131", 6379);

        //2、从池子中获取redis的连接资源
        Jedis jedis = pool.getResource();

        //3、操作数据库
        jedis.set("xxx","yyyy");
        System.out.println(jedis.get("xxx"));

        //4、关闭资源
        jedis.close();
        pool.close(); //实际开发中池子不要关闭,池子关闭了别人就没法使用了

    }

4 连接池工具类

1 工具类代码

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

public class JedisPoolUtils {

    private static JedisPool pool = null;

    static{

        //加载配置文件
        InputStream in = JedisPoolUtils.class.getClassLoader().getResourceAsStream("redis.properties");
        Properties pro = new Properties();
        try {
            pro.load(in);
        } catch (IOException e) {
            e.printStackTrace();
        }

        //获得池子对象
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxIdle(Integer.parseInt(pro.get("redis.maxIdle").toString()));//最大闲置个数
        poolConfig.setMinIdle(Integer.parseInt(pro.get("redis.minIdle").toString()));//最小闲置个数
        poolConfig.setMaxTotal(Integer.parseInt(pro.get("redis.maxTotal").toString()));//最大连接数
        pool = new JedisPool(poolConfig,pro.getProperty("redis.url") , Integer.parseInt(pro.get("redis.port").toString()));
    }

    //获得jedis资源的方法
    public static Jedis getJedis(){
        return pool.getResource();
    }
}

2 配置文件

配置文件放在src目录下面:

redis.maxIdle=30
redis.minIdle=10
redis.maxTotal=100
redis.url=192.168.186.131
redis.port=6379

5 redis有密码的jedis连接方式

单机版

package cn.e3mall.jedis;

import org.junit.Test;

import redis.clients.jedis.Jedis;

/**
 *
 * @title:JedisTest
 * @description:
 * @author jepson
 * @date 2018年6月3日 下午4:20:19
 * @version 1.0
 */
public class JedisTest {

    @Test
    public void testJedis(){
        // 第一步:创建一个Jedis对象。需要指定服务端的ip及端口。
        Jedis jedis = new Jedis("192.168.25.128", 6379);
        //设置密码
        jedis.auth("123456");
        // 第二步:使用Jedis对象操作数据库,每个redis命令对应一个方法。
        jedis.set("name", "殷桃丸子");
        String result = jedis.get("name");
        // 第三步:打印结果。
        System.out.println(result);
        // 第四步:关闭Jedis
        jedis.close();
    }
}

如果redis有密码,这里不指定密码的话,会报下面的异常

单机版-从连接池获取连接

@Test
    public void testJedispool(){
        //0、创建池子的配置对象
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxIdle(30);//最大闲置个数
        poolConfig.setMinIdle(10);//最小闲置个数
        poolConfig.setMaxTotal(50);//最大连接数

        //1、创建一个redis的连接池
        JedisPool pool = new JedisPool(poolConfig, "192.168.25.128", 6379);

        //2、从池子中获取redis的连接资源
        Jedis jedis = pool.getResource();
        jedis.auth("123456");//设置密码

      //3、操作数据库
        jedis.set("user","王五");
        System.out.println(jedis.get("user"));

        //4、关闭资源
        jedis.close();
        pool.close(); //实际开发中池子不要关闭,池子关闭了别人就没法使用了

    }

6 jedis连接redis集群版

补充知识点:redis-cli客户端连接Redis集群的方法

[[email protected] redis01]# ./redis-cli -h 192.168.25.128 -p 7006 -c
@Test
    public void testJedisCluster() throws Exception {
        // 第一步:使用JedisCluster对象。需要一个Set<HostAndPort>参数。Redis节点的列表。
        Set<HostAndPort> nodes = new HashSet<>();
        nodes.add(new HostAndPort("192.168.25.128", 7001));
        nodes.add(new HostAndPort("192.168.25.128", 7002));
        nodes.add(new HostAndPort("192.168.25.128", 7003));
        nodes.add(new HostAndPort("192.168.25.128", 7004));
        nodes.add(new HostAndPort("192.168.25.128", 7005));
        nodes.add(new HostAndPort("192.168.25.128", 7006));
        JedisCluster jedisCluster = new JedisCluster(nodes);
        // 第二步:直接使用JedisCluster对象操作redis。在系统中单例存在。
        jedisCluster.set("hello", "100");
        String result = jedisCluster.get("hello");
        // 第三步:打印结果
        System.out.println(result);
        // 第四步:系统关闭前,关闭JedisCluster对象。
        jedisCluster.close();
    }

7 封装JedisClient接口实现单机版和集群版通用

将常用的操作redis的方法提取出来一个接口,分别对应单机版和集群版创建两个实现类。

1 JedisClient接口的定义

package cn.e3mall.common.jedis;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * jedis操作redis的常用方法提取
 * @title:JedisClient
 * @description:
 * @author jepson
 * @date 2018年6月3日 下午7:52:31
 * @version 1.0
 */
public interface JedisClient {

    //commons start
    Boolean exists(String key);
    Long expire(String key, int seconds);
    Long ttl(String key);
    Long persist(String key);
    String type(String key);
    Long del(String key);
    String ping();
    //commons end

    //String  start
    String set(String key, String value);
    String get(String key);
    String getSet(String key,String value);
    Long incr(String key);
    Long incrBy(String key,Long integer);
    Double incrByFloat(String key,Double value);
    Long decr(String key);
    Long decrBy(String key,Long integer);
    Long append(String key,String value);
    //String类型的方法end

    //hash   start;
    Long hset(String key, String field, String value);
    String hmset(String key,Map<String,String> map );
    String hget(String key, String field);
    List<String> hmget(String key, String... fields);
    Map<String, String> hgetAll(String key);
    Long hincrby(String key,String field,long value);
    Long hlen(String key);
    Set<String> hkeys(String key);
    List<String> hvals(String key);
    Long hdel(String key, String... fields);
    Boolean hexists(String key, String field);
    //hash  end;
}

2 单机版的实现类

package cn.e3mall.common.jedis;

import java.util.List;
import java.util.Map;
import java.util.Set;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

/**
 * 单机版redis的方法
 * @title:JedisClientPool
 * @description:
 * @author jepson
 * @date 2018年6月3日 下午6:47:41
 * @version 1.0
 */
public class JedisClientPool implements JedisClient {

    private JedisPool jedisPool; //连接池

    private String password; //单机版密码

    //get/set
    public JedisPool getJedisPool() {
        return jedisPool;
    }

    public void setJedisPool(JedisPool jedisPool) {
        this.jedisPool = jedisPool;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public Boolean exists(String key) {
        Jedis jedis = jedisPool.getResource();
        jedis.auth(password);
        Boolean result = jedis.exists(key);
        jedis.close();
        return result;
    }

    @Override
    public Long expire(String key, int seconds) {
        Jedis jedis = jedisPool.getResource();
        jedis.auth(password);
        Long result = jedis.expire(key, seconds);
        jedis.close();
        return result;
    }

    @Override
    public Long ttl(String key) {
        Jedis jedis = jedisPool.getResource();
        jedis.auth(password);
        Long result = jedis.ttl(key);
        jedis.close();
        return result;
    }

    @Override
    public Long persist(String key) {

        Jedis jedis = jedisPool.getResource();
        jedis.auth(password);
        Long result = jedis.persist(key);
        jedis.close();
        return result;
    }

    @Override
    public String type(String key) {

        Jedis jedis = jedisPool.getResource();
        jedis.auth(password);
        String result = jedis.type(key);
        jedis.close();
        return result;
    }

    @Override
    public Long del(String key) {

        Jedis jedis = jedisPool.getResource();
        jedis.auth(password);
        Long result = jedis.del(key);
        jedis.close();
        return result;
    }

    @Override
    public String ping() {

        Jedis jedis = jedisPool.getResource();
        jedis.auth(password);
        String result = jedis.ping();
        jedis.close();
        return result;
    }

    @Override
    public String set(String key, String value) {

        Jedis jedis = jedisPool.getResource();
        jedis.auth(password);
        String result = jedis.set(key, value);
        jedis.close();
        return result;
    }

    @Override
    public String get(String key) {

        Jedis jedis = jedisPool.getResource();
        jedis.auth(password);
        String result = jedis.get(key);
        jedis.close();
        return result;
    }

    @Override
    public String getSet(String key, String value) {

        Jedis jedis = jedisPool.getResource();
        jedis.auth(password);
        String result = jedis.getSet(key, value);
        jedis.close();
        return result;
    }

    @Override
    public Long incr(String key) {

        Jedis jedis = jedisPool.getResource();
        jedis.auth(password);
        Long result = jedis.incr(key);
        jedis.close();
        return result;
    }

    @Override
    public Long incrBy(String key, Long integer) {

        Jedis jedis = jedisPool.getResource();
        jedis.auth(password);
        Long result = jedis.incrBy(key, integer);
        jedis.close();
        return result;
    }

    @Override
    public Double incrByFloat(String key, Double value) {

        Jedis jedis = jedisPool.getResource();
        jedis.auth(password);
        Double result = jedis.incrByFloat(key, value);
        jedis.close();
        return result;
    }

    @Override
    public Long decr(String key) {

        Jedis jedis = jedisPool.getResource();
        jedis.auth(password);
        Long result = jedis.decr(key);
        jedis.close();
        return result;
    }

    @Override
    public Long decrBy(String key, Long integer) {

        Jedis jedis = jedisPool.getResource();
        jedis.auth(password);
        Long result = jedis.decrBy(key, integer);
        jedis.close();
        return result;
    }

    @Override
    public Long append(String key, String value) {

        Jedis jedis = jedisPool.getResource();
        jedis.auth(password);
        Long result = jedis.append(key, value);
        jedis.close();
        return result;
    }

    @Override
    public Long hset(String key, String field, String value) {

        Jedis jedis = jedisPool.getResource();
        jedis.auth(password);
        Long result = jedis.hset(key, field, value);
        jedis.close();
        return result;
    }

    @Override
    public String hmset(String key, Map<String, String> map) {

        Jedis jedis = jedisPool.getResource();
        jedis.auth(password);
        String result = jedis.hmset(key, map);
        jedis.close();
        return result;
    }

    @Override
    public String hget(String key, String field) {

        Jedis jedis = jedisPool.getResource();
        jedis.auth(password);
        String result = jedis.hget(key, field);
        jedis.close();
        return result;
    }

    @Override
    public List<String> hmget(String key, String... fields) {

        Jedis jedis = jedisPool.getResource();
        jedis.auth(password);
        List<String> result = jedis.hmget(key, fields);
        jedis.close();
        return result;
    }

    @Override
    public Map<String, String> hgetAll(String key) {

        Jedis jedis = jedisPool.getResource();
        jedis.auth(password);
        Map<String,String> result = jedis.hgetAll(key);
        jedis.close();
        return result;
    }

    @Override
    public Long hincrby(String key, String field, long value) {

        Jedis jedis = jedisPool.getResource();
        jedis.auth(password);
        Long result = jedis.hincrBy(key, field, value);
        jedis.close();
        return result;
    }

    @Override
    public Long hlen(String key) {

        Jedis jedis = jedisPool.getResource();
        jedis.auth(password);
        Long result = jedis.hlen(key);
        jedis.close();
        return result;
    }

    @Override
    public Set<String> hkeys(String key) {

        Jedis jedis = jedisPool.getResource();
        jedis.auth(password);
        Set<String> result = jedis.hkeys(key);
        jedis.close();
        return result;
    }

    @Override
    public List<String> hvals(String key) {

        Jedis jedis = jedisPool.getResource();
        jedis.auth(password);
        List<String> result = jedis.hvals(key);
        jedis.close();
        return result;
    }

    @Override
    public Long hdel(String key, String... fields) {

        Jedis jedis = jedisPool.getResource();
        jedis.auth(password);
        Long result = jedis.hdel(key, fields);
        jedis.close();
        return result;
    }

    @Override
    public Boolean hexists(String key, String field) {

        Jedis jedis = jedisPool.getResource();
        jedis.auth(password);
        Boolean result = jedis.hexists(key, field);
        jedis.close();
        return result;
    }

}

3 集群版实现类

package cn.e3mall.common.jedis;

import java.util.List;
import java.util.Map;
import java.util.Set;

import redis.clients.jedis.JedisCluster;

/**
 * redis集群redis客户端
 * @title:JedisClientCluster
 * @description:
 * @author jepson
 * @date 2018年6月3日 下午6:48:24
 * @version 1.0
 */
public class JedisClientCluster implements JedisClient {

    private JedisCluster jedisCluster;

    public JedisCluster getJedisCluster() {
        return jedisCluster;
    }

    public void setJedisCluster(JedisCluster jedisCluster) {
        this.jedisCluster = jedisCluster;
    }

    @Override
    public Boolean exists(String key) {

        return jedisCluster.exists(key);
    }

    @Override
    public Long expire(String key, int seconds) {

        return jedisCluster.expire(key, seconds);
    }

    @Override
    public Long ttl(String key) {

        return jedisCluster.ttl(key);
    }

    @Override
    public Long persist(String key) {

        return jedisCluster.persist(key);
    }

    @Override
    public String type(String key) {

        return jedisCluster.type(key);
    }

    @Override
    public Long del(String key) {

        return jedisCluster.del(key);
    }

    @Override
    public String ping() {

        return jedisCluster.ping();
    }

    @Override
    public String set(String key, String value) {

        return jedisCluster.set(key, value);
    }

    @Override
    public String get(String key) {

        return jedisCluster.get(key);
    }

    @Override
    public String getSet(String key, String value) {

        return jedisCluster.getSet(key, value);
    }

    @Override
    public Long incr(String key) {

        return jedisCluster.incr(key);
    }

    @Override
    public Long incrBy(String key, Long integer) {

        return jedisCluster.incrBy(key, integer);
    }

    @Override
    public Double incrByFloat(String key, Double value) {

        return jedisCluster.incrByFloat(key, value);
    }

    @Override
    public Long decr(String key) {

        return jedisCluster.decr(key);
    }

    @Override
    public Long decrBy(String key, Long integer) {

        return jedisCluster.decrBy(key, integer);
    }

    @Override
    public Long append(String key, String value) {

        return jedisCluster.append(key, value);
    }

    @Override
    public Long hset(String key, String field, String value) {

        return jedisCluster.hset(key, field, value);
    }

    @Override
    public String hmset(String key, Map<String, String> map) {

        return jedisCluster.hmset(key, map);
    }

    @Override
    public String hget(String key, String field) {

        return jedisCluster.hget(key, field);
    }

    @Override
    public List<String> hmget(String key, String... fields) {

        return jedisCluster.hmget(key, fields);
    }

    @Override
    public Map<String, String> hgetAll(String key) {

        return jedisCluster.hgetAll(key);
    }

    @Override
    public Long hincrby(String key, String field, long value) {

        return jedisCluster.hincrBy(key, field, value);
    }

    @Override
    public Long hlen(String key) {

        return jedisCluster.hlen(key);
    }

    @Override
    public Set<String> hkeys(String key) {

        return jedisCluster.hkeys(key);
    }

    @Override
    public List<String> hvals(String key) {

        return jedisCluster.hvals(key);
    }

    @Override
    public Long hdel(String key, String... field) {

        return jedisCluster.hdel(key, field);
    }

    @Override
    public Boolean hexists(String key, String field) {

        return jedisCluster.hexists(key, field);
    }

}

4 applicationContext-redis.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-4.2.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
    http://www.springframework.org/schema/util
    http://www.springframework.org/schema/util/spring-util-4.2.xsd">

    <!-- 加载配置文件 -->
    <context:property-placeholder location="classpath:conf/db.properties" />

    <!-- 连接redis单机版 -->
    <bean id="jedisPool" class="redis.clients.jedis.JedisPool">
        <constructor-arg name="host" value="${redis.host}"/>
        <constructor-arg name="port" value="${redis.port}"/>
    </bean>
    <bean id="jedisClientPool" class="cn.e3mall.common.jedis.JedisClientPool">
        <property name="jedisPool" ref="jedisPool"></property>
        <property name="password" value="${redis.password}"></property>
    </bean>

    <!-- 连接redis集群 -->
    <!-- <bean id="jedisClientCluster" class="cn.e3mall.common.jedis.JedisClientCluster">
        <property name="jedisCluster" ref="jedisCluster"/>
    </bean>
    <bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">
        <constructor-arg name="nodes">
            <set>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg name="host" value="${redis.host1}"></constructor-arg>
                    <constructor-arg name="port" value="${redis.port1}"></constructor-arg>
                </bean>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg name="host" value="${redis.host2}"></constructor-arg>
                    <constructor-arg name="port" value="${redis.port2}"></constructor-arg>
                </bean>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg name="host" value="${redis.host3}"></constructor-arg>
                    <constructor-arg name="port" value="${redis.port3}"></constructor-arg>
                </bean>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg name="host" value="${redis.host4}"></constructor-arg>
                    <constructor-arg name="port" value="${redis.port4}"></constructor-arg>
                </bean>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg name="host" value="${redis.host5}"></constructor-arg>
                    <constructor-arg name="port" value="${redis.port5}"></constructor-arg>
                </bean>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg name="host" value="${redis.host6}"></constructor-arg>
                    <constructor-arg name="port" value="${redis.port6}"></constructor-arg>
                </bean>
            </set>
        </constructor-arg>
    </bean> -->
</beans>

注意:单机版和集群版不能共存,使用单机版时注释掉集群版的配置。

使用集群版时把单机版的配置注释掉。

5 db.properties配置

# mysql数据库
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/e3mall?characterEncoding=utf-8
jdbc.username=root
jdbc.password=root

#redis单机版数据库
redis.password=123456
redis.host=192.168.25.128
redis.port=6379

#redis集群数据库
redis.host1=192.168.25.128
redis.port1=7001
redis.host2=192.168.25.128
redis.port2=7002
redis.host3=192.168.25.128
redis.port3=7003
redis.host4=192.168.25.128
redis.port4=7004
redis.host5=192.168.25.128
redis.port5=7005
redis.host6=192.168.25.128
redis.port6=7006

6 测试

package cn.e3mall.jedis;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import cn.e3mall.common.jedis.JedisClient;

/**
 * 测试jedisclient
 *
 * @title:JedisClientTest
 * @description:
 * @author jepson
 * @date 2018年6月3日 下午7:36:48
 * @version 1.0
 */
public class JedisClientTest {

    @Test
    public void testJedisClient() throws Exception {
        // 初始化spring容器
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
                "classpath:spring/applicationContext-redis.xml");
        // 从容器中获得JedisClient对象
        JedisClient jedisClient = applicationContext.getBean(JedisClient.class);
        jedisClient.set("user", "lisi");
        String string = jedisClient.get("user");
        String ping = jedisClient.ping();
        System.out.println(ping);
    }
}

原文地址:https://www.cnblogs.com/lywJ/p/10710834.html

时间: 2024-08-30 12:26:28

jedis入门教程的相关文章

《Redis5.x入门教程》正式推出

关注公众号CoderBuff回复"redis"可抢先获取<Redis5.x入门教程>PDF完整版 在<ElasticSearch6.x实战教程>之后,又斗胆写了<Redis5.x入门教程>.Redis是从ES过后一直都想写的一个系列,无奈由于各方面的原因(主要是懒)迟迟没有动笔.这次"新冠肺炎"正好有时间系统的重新学习梳理Redis,在家办公期间也能不被很多琐事打扰. 和<ElasticSearch6.x实战教程>一样

&lt;zz&gt;bower入门教程

from http://www.cnblogs.com/xiaokai0203/p/5891927.html bower入门教程 什么是bower Bower是一个客户端技术的软件包管理器,它可用于搜索.安装和卸载如JavaScript.HTML.CSS之类的网络资源.其他一些建立在Bower基础之上的开发工具,如YeoMan和Grunt,这个会在以后的文章中介绍. 准备工作 安装node环境:node.js 安装Git,bower从远程git仓库获取代码包:git简易指南 安装bower 使用

【转载】GBDT(MART) 迭代决策树入门教程 | 简介

      转载地址:http://blog.csdn.net/w28971023/article/details/8240756        GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法,该算法由多棵决策树组成,所有树的结论累加起来做最终答案.它在被提出之初就和SVM一起被认为是泛化能力(generalization)较强的算法.近些年更因为被用于搜索排

SEO学习步骤总结入门教程

在这里,简单的把SEO的学习步骤说了一下,今天我们一起来把SEO学习步骤每一步的主要内容拿出来重点强调一下并做个总结.  定位好网站内容以后把你所想做排名的关键词定位好,关键词里包括了主关键词和长尾关键词.这里重点强调了不可以忽略长尾关键词的作用.  对于一个好的网站结构可以让搜索引擎蜘蛛顺利的抓取我网站的内容,进而达到被收录的目的.比较有利于蜘蛛抓取的网站结构,一般来说,收录数量相对来说会比较多.,只有让搜索引擎收录你网站页面那搜索引擎才会释放出来,这样网站关键词才可能有排名.  这里重点要注

Android基础入门教程——10.12 传感器专题(3)——加速度-陀螺仪传感器

Android基础入门教程--10.12 传感器专题(3)--加速度/陀螺仪传感器 标签(空格分隔): Android基础入门教程 本节引言: 本节继续来扣Android中的传感器,本节带来的是加速度传感器(Accelerometer sensor)以及 陀螺仪传感器(Gyroscope sensor),和上一节的方向传感器一样有着x,y,z 三个轴, 还是要说一点:x,y轴的坐标要和绘图那里的x,y轴区分开来!传感器的是以左下角 为原点的!x向右,y向上!好的,带着我们的套路来学本节的传感器吧

Android基础入门教程——8.1.3 Android中的13种Drawable小结 Part 3

Android基础入门教程--8.1.3 Android中的13种Drawable小结 Part 3 标签(空格分隔): Android基础入门教程 本节引言: 本节我们来把剩下的四种Drawable也学完,他们分别是: LayerDrawable,TransitionDrawable,LevelListDrawable和StateListDrawable, 依旧贴下13种Drawable的导图: 1.LayerDrawable 层图形对象,包含一个Drawable数组,然后按照数组对应的顺序来

Android基础入门教程——8.1.2 Android中的13种Drawable小结 Part 2

Android基础入门教程--8.1.2 Android中的13种Drawable小结 Part 2 标签(空格分隔): Android基础入门教程 本节引言: 本节我们继续来学习Android中的Drawable资源,上一节我们学习了: ColorDrawable:NinePatchDrawable: ShapeDrawable:GradientDrawable!这四个Drawable~ 而本节我们继续来学习接下来的五个Drawable,他们分别是: BitmapDrawable:Insert

Android基础入门教程——2.3.12 Date &amp; Time组件(下)

Android基础入门教程--2.3.12 Date & Time组件(下) 标签(空格分隔): Android基础入门教程 本节引言: 本节我们来继续学习Android系统给我们提供的几个原生的Date & Time组件,他们分别是: DatePicker(日期选择器),TimePicker(时间选择器),CalendarView(日期视图),好吧, 其实一开始让我扣这几个玩意我是拒绝的,因为在我的印象里,他们是这样的: 简直把我丑哭了,有木有,终于知道为什么那么多人喜欢自定义这种类型的

Android基础入门教程——2.1 View与ViewGroup的概念

Android基础入门教程--2.1 View与ViewGroup的概念 标签(空格分隔): Android基础入门教程 本节引言: 告别了第一章,迎来第二章--Android中的UI(User Interface)组件的详解, 而本节我们要学习的是所有控件的父类View和ViewGroup类!突发奇想,直接翻译官方文档对 这两个东西的介绍吧,对了,天朝原因,google上不去,Android developer上不去,我们可以 改hosts或者用vpn代理,当然也可以像笔者一样使用国内的API