Android 从sqlite检索图像名称

Android 从sqlite检索图像名称,android,Android,我有一个数据库,我有两列 第一列的名称:Img 第二列的名称:Name 我想在Listview中显示它们 显示名称没有问题 但是在显示图片时有一个问题,解决方法是什么 ِAdbter列表视图 public class adbter_listview extends ArrayAdapter<String> { Activity activity; ArrayList<Integer> icons; ArrayList<String>

我有一个数据库,我有两列 第一列的名称:Img 第二列的名称:Name 我想在Listview中显示它们 显示名称没有问题 但是在显示图片时有一个问题,解决方法是什么

ِAdbter列表视图

public class adbter_listview extends ArrayAdapter<String> {

    Activity activity;
    ArrayList<Integer> icons;
    ArrayList<String> name;

    public adbter_listview(Activity activity, ArrayList<Integer> icons, ArrayList<String> name) {
        super(activity, R.layout.custom_listview, name);
        this.activity = activity;
        this.icons = icons;
        this.name = name;
    }

    @NonNull
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = activity.getLayoutInflater();
        View v = inflater.inflate(R.layout.custom_listview, parent, false);
        ImageView iv = (ImageView) v.findViewById(R.id.imageView);
        TextView tv = (TextView) v.findViewById(R.id.textView);
        iv.setImageResource(icons.get(position));
        tv.setText(name.get(position));
        return v;
    }
}
公共类adbter_listview扩展了ArrayAdapter{
活动;
阵列列表图标;
ArrayList名称;
公共adbter_列表视图(活动、ArrayList图标、ArrayList名称){
super(活动,R.layout.custom_列表视图,名称);
这个。活动=活动;
这个图标=图标;
this.name=名称;
}
@非空
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
LayoutInflater充气器=活动。getLayoutInflater();
视图v=充气机。充气(R.layout.custom_列表视图,父视图,false);
ImageView iv=(ImageView)v.findViewById(R.id.ImageView);
TextView tv=(TextView)v.findViewById(R.id.TextView);
iv.setImageResource(icons.get(position));
tv.setText(name.get(position));
返回v;
}
}
主要活动

public class MainActivity extends AppCompatActivity {

    ListView con;
    ArrayList<String> icons_name = new ArrayList<>();
    ArrayList<Integer> icons = new ArrayList<>();
    ArrayList<String> name = new ArrayList<>();

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

        con = (ListView) findViewById(R.id.con);


        db connect = new db(MainActivity.this);
        SQLiteDatabase read = connect.getReadableDatabase();
        Cursor save = read.rawQuery("select image from game",null);
        save.moveToFirst();

        while(save.isAfterLast()==false)
        {
            icons_name.add(save.getString(0));
            icons.add(R.drawable.user);
            save.moveToNext();
        }


        adbter_listview adb = new adbter_listview(MainActivity.this,icons,name);
        con.setAdapter(adb);

    }

}
public类MainActivity扩展了AppCompatActivity{
ListView图标;
ArrayList图标_name=新建ArrayList();
ArrayList图标=新建ArrayList();
ArrayList name=新的ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
con=(ListView)findViewById(R.id.con);
db connect=新的db(MainActivity.this);
SQLiteDatabase read=connect.getReadableDatabase();
游标保存=read.rawQuery(“从游戏中选择图像”,null);
save.moveToFirst();
while(save.isAfterLast()==false)
{
图标_name.add(save.getString(0));
添加图标(R.drawable.user);
save.moveToNext();
}
adbter_listview adb=新的adbter_listview(MainActivity.this,icons,name);
con.setAdapter(亚洲开发银行);
}
}

请帮助我使用这条线获取可绘制的int id

int drawableResourceId = this.getResources().getIdentifier("nameOfDrawable", "drawable", this.getPackageName());
就你而言

nameOfDrawable=save.getString(0);我想

然后将图标添加到arrayList中

icons.add(drawableResourceId);
希望这能奏效。

而不是这个

icons.add(R.drawable.user);
使用

在adapter中,只有当图像来自drawables文件夹并使用它时,它才应该工作

R.drawable.icons.get(position)

但是首先从对不同线程的oncreate主线程调用中删除数据库调用。创建新线程或使用asynctask或使用加载程序。不要在主线程中调用sqlitedatabase。

但是显示图片时出现问题
哪个问题?怎么了?您的列名是Img和Name,但您选择的是
image
??此外,您正在将可绘图资源添加到图标的阵列列表中,而不是从数据库中添加不起作用:(/////while(save.isAfterLast()==false){String nameOfDrawable=save.getString(0);int-drawableResourceId=this.getResources().getIdentifier(“nameOfDrawable”,“drawable”,this.getPackageName());icons_name.add(nameOfDrawable);icons.add(Integer.parseInt(save.getString(0));save.moveToNext();}请您帮助我:)是否所有图像都只在drawable文件夹中?那为什么要从sqlite数据库中获取它呢?它是用于任何项目还是您正在学习?不是工作:(/////////while(save.isAfterLast()==false){String nameOfDrawable=save.getString(0);int-drawableResourceId=this.getResources().getIdentifier(“nameOfDrawable”,“drawable”,this.getPackageName());icons_name.add(nameOfDrawable);icons.add(Integer.parseInt(save.getString(0));save.moveToNext();}请帮我:)nameOfDrawable不应该是字符串,把变量名放在那里。write,drawableResourceId=this.getResources().getIdentifier(nameOfDrawable,“drawable”,this.getPackageName());你的意思是把数据库放在像这样的R.drawable.image吗?
R.drawable.icons.get(position)