热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

AndroidStudio移动开发新建数据库并从数据库中获取到图片文字数据显示在Listview列表上

AndroidStudio移动开发新建数据库并从数据库中获取到图片文字数据显示在Listview列表上-Android移动开发新建数据库并从数据库中获取到图片,文字数据显示在Lis

Android 移动开发 新建数据库并从数据库中获取到图片,文字数据显示在Listview列表上

思路:
1.新建数据库(方法有很多,我这里借用SQLiteExpert可视化数据库建的)并添加相应字段字段得到.db文件
2.查询数据库内我们想要的数据(通过自己写的类NewDao中的静态方法查询)
3.显示在控件view上(通过适配器将listview中的内容显示出来,重写适配器中getView方法用”打气筒”inflate去填充listview.)
1.1
如图建如下数据库List和表actor

img (这里要注意一下我就弄了好久)类型用blob类型,然后点load导入图片点再点ok图片就放入表中了.

运行模拟器后打开Database管理视图找到data/data/项目名/database 通过update添加进来或更换如图

1.2也可以通过新建Mydatahelp去继承SQLiteOpenHelper 新建数据库和表

package com.example.android_autolist;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import androidx.annotation.Nullable;
public class Mydatahelp extends SQLiteOpenHelper {
    public Mydatahelp( Context context, String name,  SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }
    @Override
   //新建表
    public void onCreate(SQLiteDatabase db) {
        //id,tile, text , img与数据库中对应
        String sql =("create table actor(id integer primary key autoincrement,title varchar(20),text varchar(50),img blob )");
        db.execSQL(sql);
          }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}

2.1在查询数据库中先新建一个与数据库的字段对照的类(我建的是Actor)好去存放从数据库中获得的数据
package com.example.android_autolist;
/*
创建与数据库相对于的时段类型

  • */
public class Actor {
    private  Integer id;
    private  String title;
    private  String text;
    private  byte[] img;
    public byte[] getImg() {       return img;    }
    public void setImg(byte[] img) {        this.img = img;    }
    public Integer getId() {        return id;    }
    public void setId(Integer id) {        this.id = id;    }
    public String getTitle() {        return title;    }
    public void setTitle(String title) {        this.title = title;    }
    public String getText() {        return text;    }
    public void setText(String text) {        this.text = text;    }
}

2.2查询数据库,在写的类NewDao中的静态getList方法中

 package com.example.android_autolist;
import android.app.blob.BlobHandle;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import java.util.ArrayList;
import java.util.List;
//查询获取数据库表actor中内容
public class NewDao {
    public  static List<Actor> getList(SQLiteDatabase db){
        List<Actor> newActors=new ArrayList<>();
        Cursor cursor=db.query("actor",new String[]{"title","text","img"},null,null,null,null,null);
        if(cursor.moveToFirst()){
            Actor actor=null;
            do {
                actor=new Actor();
                String title=cursor.getString(0);
                actor.setTitle(title);
                String text=cursor.getString(cursor.getColumnIndex("text"));
                actor.setText(text);
                byte[] img = cursor.getBlob(2);
                actor.setImg(img);
                 //添加到列表newActors中
                newActors.add(actor);
            }
            while (cursor.moveToNext());
        }
        return  newActors;
    }

}

此外:
Layout中要有连个视图xml文件 activity_main.xml和layout.xml文件.activity_main.xml中要有Listview控件
activity_main.xml中代码:


<RelativeLayout 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">
    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        />

layout.xml中代码


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ImageView
        android:id="@+id/img"
        android:layout_width="145dp"
        android:layout_height="110dp"   
         />
    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/img"
             android:textSize="18dp"
        android:singleLine="true"
        android:textColor="#000000"
        />
    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/title"
        android:layout_toRightOf="@id/img"
         android:textSize="14dp"
        />

RelativeLayout>


3.现在准备工作就完成了剩下的就是在MainActivity中写主要逻辑代码去调用上面的类和控件了

package com.example.android_autolist;
import androidx.appcompat.app.AppCompatActivity;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import java.util.List;
public class MainActivity extends AppCompatActivity {
    private ListView listView;
    List <Actor> actors=null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //1.新建数据库  2.查询出数据库信息 3.显示在view上
        Mydatahelp openHelper=new Mydatahelp(this,"List.db",null,1);
        SQLiteDatabase database=openHelper.getWritableDatabase();
        //2.通过NewDao中的静态方法查询
        actors=NewDao.getList(database);
         //3.显示
        listView=findViewById(R.id.listView1);
        //通过适配器将listview中的内容显示出来
        listView.setAdapter(new MyAdapter());
}
//新建MyAdapter 方法
    public class  MyAdapter extends BaseAdapter{
        @Override
        public int getCount() {
            //   动态的获取列表的个数,决定显示的个数(我在数据库中写了两条信息就会显示俩个列表)
            return actors.size();
        }
        @Override
        public Object getItem(int position) {
            return null;
        }

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

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
           View view;
           if (convertView==null)
           {    //打气筒 取得xml 里定义的view
               LayoutInflater inflater= (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
               view =inflater.inflate(R.layout.layout,null);
           }
           else  view=convertView;
           //找到控件
            TextView title=view.findViewById(R.id.title);
            TextView text=view.findViewById(R.id.text);
            ImageView imageView=view.findViewById(R.id.img);
            //重要
            //获取当前项的数据
            Actor actor=actors.get(position);
            //设置文本
            title.setText(actor.getTitle());
            text.setText(actor.getText());
            //将字节数组转换成bitmap型为了在Listview中显示
            Bitmap bitmap=stringToBitmap(actor.getImg());
            imageView.setImageBitmap(bitmap);
            return view;
        }
    }
    //字节流数值 转换成bitmap为了调用imageView.setImageBitmap()来显示图片
    public Bitmap stringToBitmap(byte[] bytes) {
        return BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
    }
}

最终效果:

希望看到这篇文章对你有帮助,代码可能有不足之处,愿与君共议.
整体的项目压缩包见下面的连接:
https://download.csdn.net/download/weixin_46097122/16138055


推荐阅读
author-avatar
禾漾啊
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有