一、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,添加注解并添加相应的抽象方法即可。
扫描二维码关注公众号,回复:
15212654 查看本文章
4、使用SQLite数据库。
//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、联网 --> 给权限。
<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>