今天闲的无聊自己做了一个小的demo,基于litepall数据库的自动查询到Listview或者RecyclerView。
这个小demo用到的技术:litepal、Listview、RecyclerView、Glide
上效果:
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
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