android中LitePal的使用

摘要:
˃dbname是指的是sqlite数据库的名称version是指的是sqlite数据库的版本号list是指的表跟对应pojo类的映射关系,需要创建几个表,就对应创建几个pojo类,并在这个配置文件中进行注册,需要注意的是,这些pojo类,必须要继承LitePalSupport类。

网上有一篇文章写的挺好的,推荐给大家:安卓项目实战之:数据库框架 LitePal 3.0 的使用详解

LitePal是对SQLite数据库操作进行了封装,采用对象映射的方式操作SQLite数据库,简化了对SQLiter的操作

我也是使用的是最新的LitePal3.0

1、首先添加依赖,引入LitePal3.0,在build.gradle中添加如下内容:

implementation group: 'org.litepal.android', name: 'java', version: '3.0.0'

2、在assets目录下创建litepal.xml文件:

<?xml version="1.0" encoding="utf-8" ?>
<litepal>
    <dbname value="db1"></dbname>
    <version value="1"></version>
    <list>
        <mapping class="com.example.chenrui.common.Student"></mapping>
    </list>
</litepal>

dbname是指的是sqlite数据库的名称

version是指的是sqlite数据库的版本号

list是指的表跟对应pojo类的映射关系,需要创建几个表,就对应创建几个pojo类,并在这个配置文件中进行注册,需要注意的是,这些pojo类,必须要继承LitePalSupport类。

3、修改AndroidManifest.xml文件:

在application标签中添加:

android:name="org.litepal.LitePalApplication"

android中LitePal的使用第1张

4、现在开始编写实例代码,本例是通过LitePal3.0对学生进行管理,实现新增、查询、删除学生的功能

添加Student.java类:

packagecom.example.chenrui.common;
importorg.litepal.crud.LitePalSupport;
public class Student extendsLitePalSupport {
    privateLong id;
    privateString username;
    privateString phone;
    privateString city;
    publicLong getId() {
        returnid;
    }
    public voidsetId(Long id) {
        this.id =id;
    }
    publicString getUsername() {
        returnusername;
    }
    public voidsetUsername(String username) {
        this.username =username;
    }
    publicString getPhone() {
        returnphone;
    }
    public voidsetPhone(String phone) {
        this.phone =phone;
    }
    publicString getCity() {
        returncity;
    }
    public voidsetCity(String city) {
        this.city =city;
    }
}

列表使用的是RecyclerView组件,这里开始编写RecyclerView组件对应的内容

RecyclerView数据项student_item.xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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:id="@+id/linearLayout1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <TextView
        android:id="@+id/username"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:textSize="32dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    <TextView
        android:id="@+id/city"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:textSize="32dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/username" />
    <TextView
        android:id="@+id/phone"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:textSize="32dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/city" />
    <View
        android:id="@+id/divider"
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:layout_marginTop="20dp"
        android:background="?android:attr/listDivider"
        app:layout_constraintBottom_toBottomOf="parent" />
</android.support.constraint.ConstraintLayout>

注意我是添加了一个View组件,用来实现在每一项之间添加一个分割线

适配器类StudentAdapter.java:

packagecom.example.chenrui.app1;
importandroid.support.annotation.NonNull;
importandroid.support.v7.widget.RecyclerView;
importandroid.view.LayoutInflater;
importandroid.view.View;
importandroid.view.ViewGroup;
importandroid.widget.TextView;
importcom.example.chenrui.common.Student;
importjava.util.List;
public class StudentAdapter extends RecyclerView.Adapter<StudentAdapter.ViewHolder>{
    private List<Student>studentList;
    publicStudentAdapter() {
    }
    public List<Student>getStudentList() {
        returnstudentList;
    }
    public void setStudentList(List<Student>studentList) {
        this.studentList =studentList;
    }
    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, inti) {
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.student_item,viewGroup,false);
        ViewHolder viewHolder = newViewHolder(view);
        returnviewHolder;
    }
    @Override
    public void onBindViewHolder(@NonNull final ViewHolder viewHolder, final inti) {
        Student student =studentList.get(i);
        viewHolder.username.setText("姓名:" +student.getUsername());
        viewHolder.city.setText("城市:" +student.getCity());
        viewHolder.phone.setText("手机号:" +student.getPhone());
        if(onItemClickListener!=null) {
            viewHolder.itemView.setOnLongClickListener(newView.OnLongClickListener() {
                @Override
                public booleanonLongClick(View v) {
                    onItemClickListener.onItemLongClick(viewHolder.itemView,i);
                    return false;
                }
            });
        }
    }
    @Override
    public intgetItemCount() {
        returnstudentList.size();
    }
    static class ViewHolder extendsRecyclerView.ViewHolder {
        TextView username;
        TextView city;
        TextView phone;
        publicViewHolder(@NonNull View itemView) {
            super(itemView);
            username =itemView.findViewById(R.id.username);
            city =itemView.findViewById(R.id.city);
            phone =itemView.findViewById(R.id.phone);
        }
    }
    privateOnItemClickListener onItemClickListener;
    public interfaceOnItemClickListener{
        void onItemLongClick(View view , intpos);
    }
    public voidsetOnItemClickListener(OnItemClickListener onItemClickListener) {
        this.onItemClickListener =onItemClickListener;
    }
}

列表Activity的代码

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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=".Main33Activity">
    <android.support.v7.widget.RecyclerView
        android:id="@+id/studentView"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:layout_constraintBottom_toTopOf="@+id/linearLayout6"
        app:layout_constraintTop_toTopOf="parent" />
    <LinearLayout
        android:id="@+id/linearLayout6"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:orientation="horizontal"
        app:layout_constraintBottom_toBottomOf="parent">
        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="新增" />
    </LinearLayout>
</android.support.constraint.ConstraintLayout>

MainActivity.java:

packagecom.example.chenrui.app1;
importandroid.content.Intent;
importandroid.support.annotation.Nullable;
importandroid.support.v7.app.AppCompatActivity;
importandroid.os.Bundle;
importandroid.support.v7.widget.LinearLayoutManager;
importandroid.support.v7.widget.RecyclerView;
importandroid.view.MenuItem;
importandroid.view.View;
importandroid.widget.Button;
importandroid.widget.PopupMenu;
importandroid.widget.Toast;
importcom.example.chenrui.common.Student;
importorg.litepal.LitePal;
importorg.litepal.crud.LitePalSupport;
importjava.util.List;
public class MainActivity extendsAppCompatActivity {
    RecyclerView view;
    StudentAdapter adapter;
    @Override
    protected void onActivityResult(int requestCode, intresultCode, @Nullable Intent data) {
        if(resultCode==RESULT_OK) {
            BindData(view);
        }
    }
    @Override
    protected voidonCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button =findViewById(R.id.button1);
        button.setOnClickListener(newView.OnClickListener() {
            @Override
            public voidonClick(View v) {
                Intent intent = new Intent(Main33Activity.this,Main2Activity.class);
                startActivityForResult(intent,1);
            }
        });
        view =findViewById(R.id.studentView);
        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        view.setLayoutManager(layoutManager);
        adapter = newStudentAdapter();
        BindData(view);
        adapter.setOnItemClickListener(newStudentAdapter.OnItemClickListener() {
            @Override
            public void onItemLongClick(View view, final intpos) {
                PopupMenu popupMenu = new PopupMenu(Main33Activity.this,view);
                popupMenu.getMenuInflater().inflate(R.menu.menu1,popupMenu.getMenu());
                //弹出式菜单的菜单项点击事件
                popupMenu.setOnMenuItemClickListener(newPopupMenu.OnMenuItemClickListener() {
                    @Override
                    public booleanonMenuItemClick(MenuItem item) {
                        if(item.getItemId()==R.id.delete) {
                            Long id =adapter.getStudentList().get(pos).getId();
                            adapter.getStudentList().remove(pos);
                            LitePal.delete(Student.class,id);
                            adapter.notifyItemRemoved(pos);
                        }
                        return false;
                    }
                });
                popupMenu.show();
            }
        });
    }
    private voidBindData(RecyclerView view) {
        //List list = LitePal.findAll(Student.class);
        List list = LitePal.order("id desc").find(Student.class);
        adapter.setStudentList(list);
        view.setAdapter(adapter);
    }
}

上面的代码,删除功能折腾了半天,删除完了不生效,后来添加上adapter.getStudentList().remove(pos);问题解决,需要把adapter绑定的数据也进行更新,问题就解决了。

PopupMenu菜单项menu1.xml:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/delete"
        android:title="删除" />
</menu>

点击“添加”按钮会进入添加Activity,对应添加的Activity

activity_main2.xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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=".Main2Activity">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:orientation="vertical"
        app:layout_constraintBottom_toTopOf="@+id/linearLayout7"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">
        <TextView
            android:id="@+id/textView13"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="姓名:"
            android:textSize="32dp" />
        <EditText
            android:id="@+id/editText7"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:inputType="textPersonName" />
        <TextView
            android:id="@+id/textView14"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="城市:"
            android:textSize="32dp" />
        <EditText
            android:id="@+id/editText8"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:inputType="textPersonName" />
        <TextView
            android:id="@+id/textView15"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="号码:"
            android:textSize="32dp" />
        <EditText
            android:id="@+id/editText9"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:inputType="textPersonName" />
    </LinearLayout>
    <LinearLayout
        android:id="@+id/linearLayout7"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:orientation="horizontal"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent">
        <Button
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="取消" />
        <Button
            android:id="@+id/button3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="确定"
            app:layout_constraintStart_toStartOf="parent" />
    </LinearLayout>
</android.support.constraint.ConstraintLayout>

Main2Activity.java:

packagecom.example.chenrui.app1;
importandroid.content.Intent;
importandroid.support.v7.app.AppCompatActivity;
importandroid.os.Bundle;
importandroid.view.View;
importandroid.widget.Button;
importandroid.widget.EditText;
importcom.example.chenrui.common.Student;
importorg.litepal.tablemanager.Connector;
public class Main2Activity extendsAppCompatActivity {
    @Override
    protected voidonCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        Button button =findViewById(R.id.button2);
        button.setOnClickListener(newView.OnClickListener() {
            @Override
            public voidonClick(View v) {
                Intent intent = newIntent();
                setResult(RESULT_CANCELED,intent);
                Main32Activity.this.finish();
            }
        });
        final EditText username =findViewById(R.id.editText7);
        final EditText city =findViewById(R.id.editText8);
        final EditText phone =findViewById(R.id.editText9);
        Button button2 =findViewById(R.id.button3);
        button2.setOnClickListener(newView.OnClickListener() {
            @Override
            public voidonClick(View v) {
                Student student = newStudent();
                student.setUsername(username.getText().toString());
                student.setCity(city.getText().toString());
                student.setPhone(phone.getText().toString());
                student.save();
                Intent intent = newIntent();
                setResult(RESULT_OK,intent);
                Main32Activity.this.finish();
            }
        });
    }
}

实现的效果:

android中LitePal的使用第2张

android中LitePal的使用第3张

免责声明:文章转载自《android中LitePal的使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇c#Winform自定义控件-目录ABP 继承 ISoftDelete 后调用 HardDeleteAsync 实现物理删除下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Android 知识图谱

一、开源项目        网络框架:  okhttp retrofit        依赖注入:  butterknife dagger2        异步处理:  rxjava        eventbus        图片框架:  glide          picasso        性能优化:  leakcanary  blockcan...

三 APPIUM Android自动化 测试初体验

1.创建一个maven项目 成功新建工程: 编辑pom.xml,在<dependencies></dependencies>下添加appium相关依赖: <dependency> <groupId>org.testng</groupId> <artifactId>...

android Studio 二维码扫一扫 使用精简过的zxing

今天学习做个扫一扫  于是就上百度找找前人的作品,终于找到了,于是就开始搞 我使用的是 最新的android Studio Android Studio 3.1.2Build #AI-173.4720617, built on April 14, 2018JRE: 1.8.0_152-release-1024-b02 amd64JVM: OpenJDK 6...

vue移动端预览pdf

vue-pdf移动端缺点: 1、安卓预览红头文件会出现缺字少字的问题,ios正常 2、预览过大文件,分页形式的好用,不分页的文件过大可能打不开 3、分页形式放大缩小只能通过按钮改变css放大,不分页无法放大 解决vue-pdf移动端问题使用pdfh5预览pfd: 1.安装 npm install pdfh5 2.使用 <template>...

adb devices 找不到连接设备 显示 List of devices attached 解决方法

最近在APP自动化测试时,需要连接手机进行真机调试,遇到了问题adb devices找不到连接设备只显示 List of devices attached,解决问题和思路如下: 1.确认adb.exe的版本   在命令行输入adb version,查看adb版本,若版本为1.0.31或以下,建议升级adb,安卓版本在4.x上的版本要求在1.0.31以上;...

2020年5月

Unity->Player Settings->Other Settings->Write Permission->External(SDCard) 关于Unity 打安卓包后在安卓9.0及以上不能通过http下载文件的解决方案 原始文件位置 增加 android:usesCleartextTraffics="true" 生...