基于litepal数据库的自动查询到Listview或者RecyclerView

今天闲的无聊自己做了一个小的demo,基于litepall数据库的自动查询到Listview或者RecyclerView。

这个小demo用到的技术:litepal、Listview、RecyclerView、Glide

上效果:

基于litepal数据库的自动查询到Listview或者RecyclerView_第1张图片基于litepal数据库的自动查询到Listview或者RecyclerView_第2张图片

1、添加依赖

compile 'org.litepal.android:core:1.6.1'
compile 'com.android.support:recyclerview-v7:28.0.0'
implementation 'com.github.bumptech.glide:glide:4.5.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.5.0'

2、新建布局

activity_main.xml



    

    

 activity_book.xml






    

    


layout_item.xml




    

    

    

    

    


 

3、创建litepal.xml(新建assets文件夹创建litepal.xml)



    
    
    
        
    

dbname:数据库名        version:数据库版本     mapping:对应的数据bean类

4、创建数据库bean类 book

package com.djp.magpietest.test02;

import org.litepal.crud.DataSupport;

/**
 * litepal数据实体类
 */

public class book extends DataSupport {
    private String imgUrl;
    private String bookName;
    private String bookAuthor;
    private String bookPrice;
    private String bookPages;

    public String getImgUrl() { return imgUrl;}

    public void setImgUrl(String imgUrl) {this.imgUrl = imgUrl;}

    public String getBookName() {return bookName;}

    public void setBookName(String bookName) {this.bookName = bookName;}

    public String getBookAuthor() {return bookAuthor;}

    public void setBookAuthor(String bookAuthor) {this.bookAuthor = bookAuthor;}

    public String getBookPrice() {return bookPrice;}

    public void setBookPrice(String bookPrice) {this.bookPrice = bookPrice;}

    public String getBookPages() {return bookPages;}

    public void setBookPages(String bookPages) {this.bookPages = bookPages;}
}

5、MainActivity.java

package com.djp.magpietest.test02;

import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import org.litepal.LitePal;
import org.litepal.crud.DataSupport;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentSkipListMap;

import okhttp3.Call;
import okhttp3.Response;

/**
 * 主界面
 */
public class MainActivity extends AppCompatActivity implements View.OnClickListener {

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

        Button createDatabase = findViewById(R.id.create_database);
        Button addData = findViewById(R.id.add_data);
        Button updateData = findViewById(R.id.update_data);
        Button deleleData = findViewById(R.id.delete_data);
        Button selectData = findViewById(R.id.select_data);
        Button main = findViewById(R.id.main);

        createDatabase.setOnClickListener(this);
        addData.setOnClickListener(this);
        updateData.setOnClickListener(this);
        deleleData.setOnClickListener(this);
        selectData.setOnClickListener(this);
        main.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {

        switch (v.getId()) {
            case R.id.create_database:
                LitePal.getDatabase();
                Toast.makeText(MainActivity.this, "创建数据库成功", Toast.LENGTH_SHORT).show();
                break;
            case R.id.add_data:
                book addData = new book();

                addData.setBookAuthor("曹雪芹");
                addData.setBookName("红楼梦");
                addData.setBookPages("186页");
                addData.setBookPrice("56元");
                addData.setImgUrl("https://upload-images.jianshu.io/upload_images/13206622-41a6268f8c107ea1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/508");
                //addData.save();


                addData.setBookAuthor("吴承恩");
                addData.setBookName("水浒传");
                addData.setBookPages("200页");
                addData.setBookPrice("80元");
                addData.setImgUrl("https://upload-images.jianshu.io/upload_images/13206622-4c9d58b5ae949a46.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/350");
                //addData.save();

                addData.setBookAuthor("罗贯中");
                addData.setBookName("三国演义");
                addData.setBookPages("256页");
                addData.setBookPrice("46元");
                addData.setImgUrl("https://upload-images.jianshu.io/upload_images/13206622-6e0d5908bf95fd59.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/350");
                //addData.save();

                addData.setBookAuthor("施耐庵");
                addData.setBookName("西游记");
                addData.setBookPages("520页");
                addData.setBookPrice("80元");
                addData.setImgUrl("https://upload-images.jianshu.io/upload_images/13206622-8a7dfd4925a4887d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/200");
                addData.save();
                Toast.makeText(MainActivity.this, "添加数据成功", Toast.LENGTH_SHORT).show();
                break;
            case R.id.select_data:
                List books = DataSupport.findAll(book.class);
                for (book book : books) {
                    Log.d("数据库目前数据", "book name is" + book.getBookName());
                   /* Log.d("this", "book auther is" + book.getBookAuthor());
                    Log.d("this", "book pages is" + book.getBookPages());
                    Log.d("this", "book press is" + book.getBookPrice());*/

                }
            case  R.id.update_data:
                book book2 = new book();
                book2.setBookPages("10页");
                book2.updateAll("bookname = ?","西游记");//将书名西游记的页数更新为10
                Toast.makeText(MainActivity.this,"更新数据成功",Toast.LENGTH_SHORT).show();
                break;
            case R.id.delete_data:
                DataSupport.deleteAll(book.class,"id>=?","1");//删除book表中,价格大于4的书
                Toast.makeText(MainActivity.this,"删除数据成功",Toast.LENGTH_SHORT).show();
                break;
            case R.id.main:

                Intent intent = new Intent();
                intent.setClass(MainActivity.this,bookActivity.class);
                startActivity(intent);


        }
    }
}

6、bookActivity.java

package com.djp.magpietest.test02;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.widget.ListView;

import org.litepal.crud.DataSupport;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 第二界面,用于显示数据库信息
 * 这个地方用了listview或者RecyclerView,当前注释掉了listview,RecyclerView较强大
 */
public class bookActivity extends Activity {
    String  name ;
    String Author ;
    String url ;
    String Price;
    String Pages ;

    RecyclerView recyclerView;

/*    public ListView listView;
    public  ListviewAdapter adapter;*/
    //private List RecylerList;
    private List> arrayList = new ArrayList>();
    /**
     * 处理异步消息,子线程通过Handler来通知主线程进行UI更新
     */
   /* Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            if(msg.what == 1){
                adapter = new ListviewAdapter(bookActivity.this,arrayList);  //添加到listview适配器
                listView.setAdapter(adapter);
            }
        }
    };*/
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_book);

        //listView =findViewById(R.id.listview);
        recyclerView = findViewById(R.id.recycler_view);

        //取出数据库数据
        getlitepalData();

        //设置适配器
        recyclerView.setAdapter(new RecylerViewAdapter(arrayList));
        //构造 LinearLayputManager,并设置方向。LinearLayputManager效果类似ListView。
        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        //设置滑动方向:纵向
        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        //添加Android自带的分割线
        recyclerView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL));

        //RecyclerView比listview强大之处就在这里,还可一实现横行排列
        /*//设置滑动方向:横向
        layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
        //添加Android自带的分割线
        recyclerView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.HORIZONTAL));*/


        recyclerView.setLayoutManager(layoutManager);



    }

    private void getlitepalData() {
        List mian = DataSupport.findAll(book.class);
        for (book book : mian) {
            //取出数据库的每一项数据
            name = book.getBookName();
            Author = book.getBookAuthor();
            url = book.getImgUrl();
            Price = book.getBookPrice();
            Pages = book.getBookPages();
            //将数据添加到集合中
           Map map = new HashMap();
            map.put("name",name);
            map.put("Author",Author);
            map.put("url",url);
            map.put("Price",Price);
            map.put("Pages",Pages);
            arrayList.add(map);

            //handler.sendEmptyMessage(1);



           /* //使用RecylerBean时使用
            RecylerList.add(new RecylerBean("Apple",R.drawable.apple_pic));
            RecylerList.add(new RecylerBean("Orange",R.drawable.orange_pic));
            RecylerList.add(new RecylerBean("Grape",R.drawable.grape_pic));
            RecylerList.add(new RecylerBean("Cherry",R.drawable.cherry_pic));
            RecylerList.add(new RecylerBean("Mango",R.drawable.mango_pic));
            RecylerList.add(new RecylerBean("Pear",R.drawable.pear_pic));
            RecylerList.add(new RecylerBean("Pineapple",R.drawable.pineapple_pic));
            RecylerList.add(new RecylerBean("Watermelon",R.drawable.watermelon_pic));*/

        }
    }
}

7、LiseAdapter.java

package com.djp.magpietest.test02;


import android.content.Context;
import android.text.Layout;
import android.util.Size;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import java.util.List;
import java.util.Map;

/**
 * listview适配器
 */
public class BookAdapter extends BaseAdapter {
    Context c;
    List> arrayList;

    //接收传入的参数
    public BookAdapter(Context c, List> arrayList) {
        this.c = c;
        this.arrayList = arrayList;
    }


    @Override
    public int getCount() {
        return arrayList.size();
    }

    @Override
    public Object getItem(int i) {
        return arrayList.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        view = View.inflate(c, R.layout.layout_item, null);


            TextView name = view.findViewById(R.id.tv_book_name);
            name.setText(arrayList.get(i).get("name"));

            TextView Author = view.findViewById(R.id.tv_book_author);
            Author.setText(arrayList.get(i).get("Author"));

            TextView Price = view.findViewById(R.id.tv_book_price);
            Price.setText(arrayList.get(i).get("Price"));

            TextView Pages = view.findViewById(R.id.tv_book_pages);
            Pages.setText(arrayList.get(i).get("Pages"));

            ImageView imageView = view.findViewById(R.id.iv_book_image);
            Glide.with(c).load(arrayList.get(i).get("url")).into(imageView);//Glide图片加载框架

        return view;
    }
}

8、RecylerViewAdapter.java

package com.djp.magpietest.test02;

import android.app.Activity;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;

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

/**
 * 使用RecylerViewAdapter适配器
 * 加载该控件时,每显示一项,就调用一次onCreateViewHolder方法和一次onBindViewHolder方法,后期滑动时候加载新的项只调用onBindViewHolder方法。
 */

public class RecylerViewAdapter extends  RecyclerView.Adapter {


   // List bookList;
    List>  arrayList;

    Context context;
    Activity activity;

    /**
     * 构造方法
     * @param arrayList 数据源    接收传入的数据
     */
    public RecylerViewAdapter(List> arrayList) {
        this.arrayList = arrayList;
    }

    /**
     * 创建ViewHolder实例
     * @param parent
     * @param viewType
     * @return
     */
    @Override
    public ViewHolder onCreateViewHolder( ViewGroup parent, int viewType) {
        Log.i("test","onCreateViewHolder");
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_item,parent,false);//加载子布局
        final ViewHolder viewHolder = new ViewHolder(view);


        return viewHolder;
    }

    /**
     * 绑定ViewHolder,每加载一项都会调用一次
     * 对每一项数据进行赋值
     * @param holder
     * @param position
     */
    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        Log.i("test","onBindViewHolder");
      //  RecylerBean recylerBean = bookList.get(position);
       // holder.bookname.setText(recylerBean.getFruitName());


        //将获取到的数据为每一项赋值
        //Glide加载RecyclerView图片时,使用holder.itemView.getContext()代表上下文context
        Glide.with(holder.itemView.getContext()).load(arrayList.get(position).get("url")).into(holder.bookImage);
        holder.bookname.setText(arrayList.get(position).get("name"));
        holder.bookauthor.setText(arrayList.get(position).get("Author"));
        holder.bookprice.setText(arrayList.get(position).get("Price"));
        holder.bookpages.setText(arrayList.get(position).get("Pages"));

    }

    /**
     * 获取项数量
     * 告诉RecyclerView一共有多少子项。
     * @return
     */
    @Override
    public int getItemCount() {
        return arrayList.size();
    }

    /**
     * RecyclerView的持有者类
     */
    static class ViewHolder extends RecyclerView.ViewHolder{
        ImageView bookImage;
        TextView bookname;
        TextView bookauthor;
        TextView bookprice;
        TextView bookpages;

        public ViewHolder(View view){
            super(view);
            //获取子布局view中的控件
            bookImage = view.findViewById(R.id.iv_book_image);
            bookname = view.findViewById(R.id.tv_book_name);
            bookauthor = view.findViewById(R.id.tv_book_author);
            bookprice = view.findViewById(R.id.tv_book_price);
            bookpages = view.findViewById(R.id.tv_book_pages);

        }

    }


}

9、RecylerBean.java.java(在本项目没用到,我把读取数据都放在集合中了)

package com.djp.magpietest.test02;

public class RecylerBean {
    private String imgUrl;
    private String bookName;
    private String bookAuthor;
    private String bookPrice;
    private String bookPages;

    public RecylerBean(String imgUrl,String bookName,String bookAuthor,String bookPrice,String bookPages){
        this.imgUrl = imgUrl;
        this.bookName = bookName;
        this.bookAuthor = bookAuthor;
        this.bookPrice = bookPrice;
        this.bookPages = bookPages;
    }

    public String getImgUrl() {
        return imgUrl;
    }

    public void setImgUrl(String imgUrl) {
        this.imgUrl = imgUrl;
    }

    public String getBookName() {
        return bookName;
    }

    public void setBookName(String bookName) {
        this.bookName = bookName;
    }

    public String getBookAuthor() {
        return bookAuthor;
    }

    public void setBookAuthor(String bookAuthor) {
        this.bookAuthor = bookAuthor;
    }

    public String getBookPrice() {
        return bookPrice;
    }

    public void setBookPrice(String bookPrice) {
        this.bookPrice = bookPrice;
    }

    public String getBookPages() {
        return bookPages;
    }

    public void setBookPages(String bookPages) {
        this.bookPages = bookPages;
    }
}
 

代码全在这了,不要懒啊!自己敲!!!

demo也有很多不足的地方,就是插入多条数据。请多多指教!!!

demo下载地址:链接:https://pan.baidu.com/s/1luPEzy9QiXpchCBlVyfJ_g   提取码:n25o 
 

 

你可能感兴趣的:(我的Android小demo)