如何不按位置而是按表sqlite中的_id切换到新Activity

Posted

技术标签:

【中文标题】如何不按位置而是按表sqlite中的_id切换到新Activity【英文标题】:How to switch to a new Activity not by position, but by _id in the table sqlite 【发布时间】:2020-02-05 14:13:32 【问题描述】:

你好。有一个表格,其中的数据按位置显示在 ListView 中。一切都很好。但是如果表中有空格,那么这就会成为一个问题。如何通过表格中的 _id 而不是位置切换到所需的活动? 我寻求帮助,我将不胜感激。 非常感谢大家! 以下是我的代码:

这是我的代码 MainActivity.java

this.listView = findViewById(R.id.listView);
    DatabaseAccess databaseAccess = DatabaseAccess.getInstance(this);
    databaseAccess.open();
    List<String> quotes = databaseAccess.getQuotes();
    databaseAccess.close();
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
    android.R.layout.simple_list_item_1, quotes);
    this.listView.setAdapter(adapter);
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() 
    
        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                                int position, long id) 
            if(id==0)
                Intent myintent = new 
    Intent(view.getContext(),MosObl.class);
                startActivityForResult(myintent,0);
            
            if(id==1)
                Intent myintent = new 
    Intent(view.getContext(),Arhangelsk.class);
                startActivityForResult(myintent,1);
            
            if(id==2)
                Intent myintent = new 
    Intent(view.getContext(),Astrahan.class);
                startActivityForResult(myintent,2);
            

这是我的代码 DatabasesAccess.java

public List<String> getQuotes() 
    List<String> list = new ArrayList<>();
    Cursor cursor = database.rawQuery("SELECT * FROM regiones where izbrannoe = 1", null);
    cursor.moveToFirst();
    while (!cursor.isAfterLast()) 
        list.add(cursor.getString(0));
        cursor.moveToNext();
    
    cursor.close();
    return list;

【问题讨论】:

欢迎您!你的代码在哪里? 【参考方案1】:

有了被点击项目的位置(这是你唯一能直接得到的东西),你可以从你的“报价”列表中得到报价,使用:

final String desiredQuote = quotes.get(position);

然后,向您的数据库发出请求,您将能够获得所需的 ID。比如:

final Cursor cursor = database.rawQuery("SELECT _id FROM regiones where izbrannoe = 1 AND quote=?",new String [] desiredQuote);

这就是你要找的吗?

【讨论】:

非常感谢您的快速回复。我是编程新手,我仍然什么也得不到。你能用代码元素更详细地解释如何做到这一点吗?抱歉冒昧。 在您的onItemClick 方法中,每次单击列表中的项目时都会调用该方法,您有positionorgument,它是被单击项目在ListView 中的位置。有了这个位置,您可以从list ArrayList 中获取字符串。它应该在相同的位置。然后你只需要查询你的数据库来得到_id对应你数据库中这个字符串,假设你数据库中的每个字符串都是唯一的。 非常感谢,好主意。你能帮我写代码吗,因为我的脑袋已经不灵了,什么都不起作用。我真的很感激。 这可能很困难,因为我不知道您的数据库或您的应用程序...:/ 非常感谢。我会试试的。

以上是关于如何不按位置而是按表sqlite中的_id切换到新Activity的主要内容,如果未能解决你的问题,请参考以下文章

android.database.sqlite.SQLiteException: no such column: id (code 1 SQLITE_ERROR): , 同时从旧版本的 db 编译到新

如何通过索引(而不是 id)在 SQLite 中获取一行

如何在不将旧根保存在堆栈中的情况下切换到新根?

如何从sqlite中的多个表中选择特定列?

如何使用 php 更新 SQLite 表中的数据?

如何将数据库上下文切换到新创建的数据库?