Android Studio如何获取SQLite数据并显示到ListView上

我们在使用ListView的时候需要和数据进行绑定,那么问题来了,如何获取SQLite数据库中的数据并动态的显示到ListView当中呢?其实过程很简单:首先要获取SQLite数据(当然首先你要创建一个SQLite数据库并填写了一些数据),然后引入ListView控件,最后将数据和ListView绑定就好了。

一 获取SQLite数据库中的数据

SQLite是一个轻量级的数据库,它能将数据保存到你的手机,但缺点是一旦软件卸载所有数据将一同被销毁。所以要根据自己的项目需要选择性的使用。下面要演示将SQLite中的数据提取出来。

首先定义一个类用来实例化数据库

public class initdate {
  public Bitmap bitmap;
  public String content;
  public String data;
  public initdate (Bitmap bitmap ,String context,String time){
    this.bitmap =bitmap;
    this.content =context;
    this.data =time;
  }
}

创建一个List对象用来存储数据

List<initdate> list = new ArrayList<>();

获取SQLite中对应表的数据

 DBOpenHelper helper = new DBOpenHelper(getActivity(), "数据库的名称", null, 1);//创建对象
    SQLiteDatabase db = helper.getWritableDatabase();
    Cursor c = db.query("表名", null, null, null, null, null, null);
    if (c != null && c.getCount() >= 1) {
      while (c.moveToNext()) {
        list.add(new initdate(base64ToBitmap(c.getString(c.getColumnIndex("字段名1"))), c.getString(c.getColumnIndex("字段名2")),
            c.getString(c.getColumnIndex("字段名3"))));
      }
      c.close();
      db.close();//关闭数据库
    }

base64ToBitmap方法用于将String类型转换成Bitmap

 public static Bitmap base64ToBitmap(String base64info) {
    byte[] bytes = Base64.decode(base64info, Base64.DEFAULT);
    return BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
  }

二 引入ListView控件

ListView的引入是比较简单的,我们可以直接将ListView控件拖拽到xml文件中即可。这里不过多介绍

 <ListView
    android:id="@+id/lv_expense"
    style="@style/Animation.AppCompat.DropDownUp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

三 将数据和ListView绑定

首先将获取到的数据通过一个循环存放到map对象中

 for (int i = 0; i < list.size(); i++) {
      Map<String, Object> map = new HashMap<String, Object>();
      map.put("image", list.get(i).bitmap);
      map.put("category", list.get(i).content);
      map.put("money", list.get(i).data);
      listitem.add(map);
    }

    SimpleAdapter adapter = new SimpleAdapter(getActivity()
        , listitem
        , R.layout.fragment_one_item
        , new String[]{"category", "money", "image"}
        , new int[]{R.id.tv_expense_category, R.id.tv_expense_money, R.id.image_expense});

    ListView listView = (ListView) v.findViewById(R.id.lv_expense);
    listView.setAdapter(adapter);

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {//设置监听器
      @Override
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        Map<String, Object> map = (Map<String, Object>) parent.getItemAtPosition(position);
        Toast.makeText(getActivity(), map.get("category").toString(), Toast.LENGTH_LONG).show();
      }
    });

fragment_one_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent">

  <ImageView
    android:id="@+id/image_expense"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:paddingTop="10dp"
    android:paddingRight="10dp"
    android:paddingBottom="10dp"
    android:adjustViewBounds="true"
    android:maxWidth="72dp"
    android:maxHeight="72dp"/>
  <TextView
    android:id="@+id/tv_expense_category"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:padding="10dp"/>
  <TextView
    android:id="@+id/tv_expense_money"
    android:layout_width="wrap_content"
    android:layout_height="40dp"
    android:text="100yuan"/>
</LinearLayout>

此时我们已经将获取到的数据和ListView进行了绑定,我们可以直接运行,发现除了小照片不能显示外其他的信息都正常显示。这是由于SimpleAdapter 适配器默认使用显示的图片资源都是程序内的本地资源就是能通过R.drawable.–得到的,如果我们想要把从数据库中获得的Bitmap类型的图片显示到ListView中就要自己实现ViewBinder()这个接口,在里面定义数据和视图的匹配关系 。

 for (int i = 0; i < list.size(); i++) {
      Map<String, Object> map = new HashMap<String, Object>();
      map.put("image_expense", list.get(i).bitmap);
      map.put("expense_category", list.get(i).content);
      map.put("expense_money", list.get(i).data);
      listitem.add(map);
    }
     SimpleAdapter adapter = new SimpleAdapter(getActivity()
        , listitem
        , R.layout.fragment_one_item
        , new String[]{"expense_category", "expense_money", "image_expense"}
        , new int[]{R.id.tv_expense_category, R.id.tv_expense_money, R.id.image_expense});
    adapter.setViewBinder(new SimpleAdapter.ViewBinder() {

      @Override
      public boolean setViewValue(View view, Object data,
                    String textRepresentation) {
        if ((view instanceof ImageView) & (data instanceof Bitmap)) {
          ImageView iv = (ImageView) view;
          Bitmap bm = (Bitmap) data;
          iv.setImageBitmap(bm);
          return true;
        }
        return false;
      }
    });
    ListView listView = (ListView) v.findViewById(R.id.lv_expense);
    listView.setAdapter(adapter);

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {//设置监听器
      @Override
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        Map<String, Object> map = (Map<String, Object>) parent.getItemAtPosition(position);
        Toast.makeText(getActivity(), map.get("expense_category").toString(), Toast.LENGTH_LONG).show();
      }
    });

此时照片资源也能正常显示了。

总结

到此这篇关于Android Studio如何获取SQLite数据并显示到ListView上的文章就介绍到这了,更多相关android studio SQLite数据ListView内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Android Studio 通过登录功能介绍SQLite数据库的使用流程

    前言: SQLite简介:是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中.它是D.RichardHipp建立的公有领域项目.它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了.它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl.C#.PHP.Java等,还有ODBC接口,同样比起Mysql.PostgreSQL这两款开源的世

  • SQLiteStudio优雅调试Android手机数据库Sqlite(推荐)

    前言 调试Android中的数据库有多种方式,目前比较流行的是:借助电脑端浏览器来调试,可以使用如下两个玩意: 1.Stetho 2.Android-Debug-Database 博主在调试sqlite的时候,发现了个更加简单和强大的工具来调试sqlite数据库. 这个工具叫 SQLiteStudio SQLiteStudio 它是个电脑端的软件,一个可视化sqlite的工具,利用SQLiteStudio,我们可以从各种角度,各种姿势去管理sqlite数据库. 对于Android开发者来说,它可

  • android studio使用SQLiteOpenHelper()建立数据库的方法

    在android studio中存储数据有三个方法,分别是: (1)简单存储--SharedPreferences (2)文件存储:内部存储--应用程序私有文件外部存储--SD卡资源文件--只读( RAW .XML) (3)数据库存储--SQLiteDataBase 今天我们讲讲在android studio中利用数据库存储中的SQLiteOpenHelper()方法建立数据库 SQLiteOpenH elper中需要重载函数: onCreate( ):利用SQL语句,在系统中创建数据库(表)功

  • Android Studio如何获取SQLite数据并显示到ListView上

    我们在使用ListView的时候需要和数据进行绑定,那么问题来了,如何获取SQLite数据库中的数据并动态的显示到ListView当中呢?其实过程很简单:首先要获取SQLite数据(当然首先你要创建一个SQLite数据库并填写了一些数据),然后引入ListView控件,最后将数据和ListView绑定就好了. 一 获取SQLite数据库中的数据 SQLite是一个轻量级的数据库,它能将数据保存到你的手机,但缺点是一旦软件卸载所有数据将一同被销毁.所以要根据自己的项目需要选择性的使用.下面要演示将

  • Android Studio不能获取远程依赖包的完美解决方法

    最近被一个AS的sync问题困扰,在引入远程依赖包的时候,会出现一个sync错误,提示找不到这个类库.然而,并不是所有的工程都会出现这个问题,有的工程引入同样的类库却没有问题. Error:(25, 13) Failed to resolve: com.jakewharton:butterknife:5.1.1 网上查了下(http://stackoverflow.com/questions/20746071/failed-to-build-android-hello-world-applica

  • vue使用ajax获取后台数据进行显示的示例

    实例如下所示: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="/vue.min.js"></script> <script src="/vue-resource.min.js"&g

  • Select2在使用ajax获取远程数据时显示默认数据的方法

    假设我需要在我的select2中默认添加一个之前从服务器上获取过的数据,通过以下方法实现.实测可行~ var value = 1 var text = '默认文本' $('.selecter').html('<option value="' + value + '">' + text + '</option>').trigger("change") 以上代码其实就是将class="selecter"的select内容进行重

  • 浅谈vue获得后台数据无法显示到table上面的坑

    因为刚学vue然后自己自习了一下axios,然后想写一个简单的查询后台数据 <tr v-for=" user in uList"> <td>{{user.id}}</td> <td>{{user.name}}</td> <td>{{user.gender}}</td> </td> </tr> 然后先是写了这样一个代码 created: function () { axios.ge

  • C#实现读取DataSet数据并显示在ListView控件中的方法

    本文实例讲述了C#实现读取DataSet数据并显示在ListView控件中的方法.分享给大家供大家参考.具体如下: /*lvStudentList为ListView控件名 */ DataSet ds = new DataSet(); ds = student.QueryStudents(); //查询表的信息 int rowCount, columnCount,i,j; rowCount = ds.Tables[0].Rows.Count; columnCount = ds.Tables[0].

  • Android利用ContentProvider获取本地数据的方法

    上一篇,我们讲到ContentProvider的主要功能是,提供共享数据给其他应用使用.在Android系统内部,同样提供了共享数据,查看 android.provider 包下,发现有以下的共享数据 本地多媒体(图片.音视频等) 通讯录联系人 通话记录 短信记录 ... 当然,这些数据必须通过用户授权后才可以调用,所以在调用前请申请对应的权限(6.0系统以上) 复制代码 代码如下: requestPermissions(new String[]{Manifest.permission.READ

  • Android Studio实现智能聊天

    本文实例为大家分享了Android Studio实现智能聊天的具体代码,供大家参考,具体内容如下 1.布局activit_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:app="http://schemas

  • Android Studio中使用jni进行opencv开发的环境配置方法

    使用jni进行opencv开发可以快速地将PC端的opencv代码移植到手机上,但是如何在android studio下进行配置,网上几乎找不到教程,大多都是eclipse下使用mk文件的方法,找不到使用gradle的方案,摸了几天,总算是摸清楚了. 其实找对了方法,用android studio配置环境要比eclipse简单很多,首先是预先准备的环境: 1.Android studio,官网最新版,我用的是2.3.1: 2.OpenCV4Android,官网最新版,我用的3.2.0: 就这两个

  • Android studio 去除版本控制教程

    这个比较简单,但是刚用as不久的朋友可能不知道.这里也不啰嗦了,给两张图就全懂了 按ctrl+alt+s打开设置面板 选择 Version  Control 点击项目,点-号,然后点ok,别急这里还没完全删除. 选择module右键 删除版本控制文件就好了,如果找不到这个文件,请设置显示隐藏文件. 补充知识:Android Studio 上传 svn 很慢 Commit Dialog一直存在 问题描述: Android Studio 维护多个项目,其中有一个项目在上传 svn 时异常缓慢,修改一

随机推荐