一、SQLite数据库存储 (room第三方框架)。

room是Android 官方提供的第三方框架,可以简化SQLite数据库存储操作,不需要额外添加依赖。

1、创建SQLite数据库实体类。

import androidx.room.Entity;
import androidx.room.PrimaryKey;

//注解:可以影响逻辑 自动创建表 表名即类名  自动创建表 表名即类名
@Entity
public class User1 {

    @PrimaryKey(autoGenerate = true)//主键自增长
    public int id;
    public String username;
    public String password;
    public int age;
}

第一步  新建一个java类 (类名即数据库表名)。

第二步  添加注释,@Entity。

第三步  添加主键,至少需要一个主键,否则会报错。

2、新建Dao接口。

import androidx.room.Dao;
import androidx.room.Delete;
import androidx.room.Insert;
import androidx.room.Query;
import java.util.List;

//Dao结尾的类一般是数据库增删改查的方法
@Dao
public interface UserDao {

    @Insert
    void insertUser(User1 user1);

    @Delete
    void deletUser(User1 user1);

    @Query("select * from User1")
    List<User1> findAllUser();

    //精确匹配  and 或者 or
    @Query("select * from User1 where id = :userId")
    List<User1> findAllUser(int userId);

    //模糊查询
    @Query("select * from User1 where username like '%' || :name || '%'")
    List<User1> findAllUser(String name);
}

Dao结尾的类一般是数据库增删改查的方法。

第一步  新建Dao接口,接口名字可以自己取。

第二步  添加注解@Dao。

第三步   增删改查  添加相应的注解即可。

条件查询的条件参数前要加冒号(where id = :userId)。

模糊查询格式为     like '%' || :name || '%'    。用 || 替代了 + 号。

3、建立数据库连接。

import androidx.room.Database;
import androidx.room.RoomDatabase;

//帮助建立数据库链接
//第一个参数 数据库里的表  第二个参数是版本号
@Database(entities = {User1.class},version = 1,exportSchema = false)
public abstract class UserDaoDatabase extends RoomDatabase{

    public abstract UserDao getUserDao();
}

新建一个类去继承 RoomDatabase,添加注解并添加相应的抽象方法即可。

4、使用SQLite数据库。

Android三方log库 android第三方数据库_Android三方log库

//myTest是数据库的名字
        userDaoDatabase = Room.databaseBuilder(this, UserDaoDatabase.class, "myTest")
                .allowMainThreadQueries()//允许在主线程中调用
                .build();
        //返回的不是一个接口对象,返回的是接口类的实现类  运行期间动态生成类
        userDao = userDaoDatabase.getUserDao();

主要目的就是得到Dao的对象,然后通过Dao对象调用相应数据库操作方法。

值得注意的是databaseBuilder的第三个参数是数据库的名字,在不同的Activity使用时,要注意数据库名是否相同。

二、Banner(轮播图)的使用。

Banner属于第三方框架,网址:https://github.com/youth5201314/banner

第一步、导入依赖包。

implementation 'io.github.youth5201314:banner:2.2.2'
    implementation 'com.github.bumptech.glide:glide:4.13.0'
    annotationProcessor 'com.github.bumptech.glide:compiler:4.13.0'

下面两行是第三方框架Glide的包,用来加载网络图片。

2、联网 --> 给权限。

Android三方log库 android第三方数据库_android_02

<uses-permission android:name="android.permission.INTERNET"/>
android:usesCleartextTraffic="true"

3、Banner使用。

需要事先准备一些图片素材或布局等。

添加Banner控件:

<com.youth.banner.Banner
        android:id="@+id/banner"
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:layout_marginBottom="52dp"
        app:layout_constraintBottom_toBottomOf="parent"
        tools:layout_editor_absoluteX="0dp" />

核心代码:

banner.setAdapter(new BannerImageAdapter<String>(stringList) {
            @Override
            public void onBindView(BannerImageHolder holder, String data, int position, int size) {
                //进行网络图片加载
                Glide.with(holder.imageView)
                        .load(data)
                        .into(holder.imageView);
            }
        });
        banner.setIndicator(new CircleIndicator(this));//设置底部指示点
        banner.setIndicatorRadius(80);//设置指示点半径  像素

先将new BannerImageAdapter<String>(stringList) 参数设置好再实现方法,这样方法参数就会自动设置好。 

三、MainActivity及xml代码。

主活动代码:

import androidx.appcompat.app.AppCompatActivity;
import androidx.room.Room;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import com.bumptech.glide.Glide;
import com.youth.banner.Banner;
import com.youth.banner.adapter.BannerImageAdapter;
import com.youth.banner.holder.BannerImageHolder;
import com.youth.banner.indicator.CircleIndicator;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    UserDaoDatabase userDaoDatabase;
    UserDao userDao;

    Banner banner;
    List<String> stringList = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 联网 -> 加权限
        banner = findViewById(R.id.banner);
        stringList.add("https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fc-ssl.duitang.com%2Fuploads%2Fblog%2F202101%2F29%2F20210129103023_25e2a.thumb.1000_0.jpeg&refer=http%3A%2F%2Fc-ssl.duitang.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1653206347&t=e355e1ccfca326daf70c015dc7de9814");
        stringList.add("https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fc-ssl.duitang.com%2Fuploads%2Fitem%2F202004%2F28%2F20200428113723_tjdxt.thumb.1000_0.png&refer=http%3A%2F%2Fc-ssl.duitang.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1653206349&t=8a855e1b3ca5a2a5c919c1e45cf6eba5");
        stringList.add("https://img2.baidu.com/it/u=1245721033,1882725398&fm=253&fmt=auto&app=138&f=JPEG?w=891&h=500");
        stringList.add("https://img1.baidu.com/it/u=1754209610,2981487171&fm=253&fmt=auto&app=138&f=JPEG?w=400&h=267");
        stringList.add("https://img2.baidu.com/it/u=457382318,2717478381&fm=253&fmt=auto&app=138&f=JPEG?w=750&h=500");
        stringList.add("https://img0.baidu.com/it/u=3785151230,182138837&fm=253&fmt=auto&app=138&f=JPEG?w=806&h=500");
        stringList.add("https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fc-ssl.duitang.com%2Fuploads%2Fitem%2F202004%2F14%2F20200414111904_eueyy.thumb.400_0.jpg&refer=http%3A%2F%2Fc-ssl.duitang.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1653206959&t=eaa07f9d0c8cef857dd2cd49f78ee4a0");
        banner.setAdapter(new BannerImageAdapter<String>(stringList) {
            @Override
            public void onBindView(BannerImageHolder holder, String data, int position, int size) {
                //进行网络图片加载
                Glide.with(holder.imageView)
                        .load(data)
                        .into(holder.imageView);
            }
        });
        banner.setIndicator(new CircleIndicator(this));//设置底部指示点
        banner.setIndicatorRadius(80);//设置指示点半径  像素

        //myTest是数据库的名字
        userDaoDatabase = Room.databaseBuilder(this, UserDaoDatabase.class, "myTest")
                .allowMainThreadQueries()//允许在主线程中调用
                .build();
        //返回的不是一个接口对象,返回的是接口类的实现类  运行期间动态生成类
        userDao = userDaoDatabase.getUserDao();

        findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                User1 user1 = new User1();
                user1.username = "text123";
                user1.password = "123456";
                user1.age = 20;
                userDao.insertUser(user1);

            }
        });

        findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                User1 user1 = new User1();
                user1.id = 1;
                user1.username = "test123";
                user1.password = "123456";
                user1.age = 20;
                userDao.deletUser(user1);
            }
        });

        findViewById(R.id.button3).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                List<User1> user1List = userDao.findAllUser("123");
                // user1List.contains("das"); contains判断list是否存在某个元素。
                for (User1 user1 : user1List) {
                    Log.i("User1", "id=" + user1.id + "    username" + user1.username);
                }
            }
        });
    }
}

主布局代码:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="172dp"
        android:layout_marginTop="44dp"
        android:text="添加数据"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="4dp"
        android:layout_marginTop="32dp"
        android:text="删除数据"
        app:layout_constraintStart_toStartOf="@+id/button"
        app:layout_constraintTop_toBottomOf="@+id/button" />

    <Button
        android:id="@+id/button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="4dp"
        android:layout_marginTop="36dp"
        android:text="查询数据"
        app:layout_constraintStart_toStartOf="@+id/button2"
        app:layout_constraintTop_toBottomOf="@+id/button2" />

    <com.youth.banner.Banner
        android:id="@+id/banner"
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:layout_marginBottom="52dp"
        app:layout_constraintBottom_toBottomOf="parent"
        tools:layout_editor_absoluteX="0dp" />

</androidx.constraintlayout.widget.ConstraintLayout>