Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android sqlite数据库检索有问题_Android_Database_Sqlite_Tableview - Fatal编程技术网

android sqlite数据库检索有问题

android sqlite数据库检索有问题,android,database,sqlite,tableview,Android,Database,Sqlite,Tableview,我正在android中制作一个tableview,其中有两列。第一列是itemname,第二列是itemprice。我已经把所有东西都连接到数据库了。我做了一个很好的选择,将itemname列作为一个自动完成文本视图进行修改,并将其连接到listview,后者进一步连接到隐藏的数据库。所以,我得到了项目名称。。。现在我想,每当我在列中添加itemname时,相应项目数据库中的价格都会自动检索到列中……请帮助我,我从上个月开始就被它绊倒了 public Cursor getAllData1()

我正在android中制作一个tableview,其中有两列。第一列是itemname,第二列是itemprice。我已经把所有东西都连接到数据库了。我做了一个很好的选择,将itemname列作为一个自动完成文本视图进行修改,并将其连接到listview,后者进一步连接到隐藏的数据库。所以,我得到了项目名称。。。现在我想,每当我在列中添加itemname时,相应项目数据库中的价格都会自动检索到列中……请帮助我,我从上个月开始就被它绊倒了

 public Cursor getAllData1() {
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor res1 = db.rawQuery("select * from " + Tname, null);
        return res1;
    }
在我的主要活动中

 private void preparedata() {
        list = new ArrayList<String>();
        Cursor res1 = mydb.getAllData1();

        if (res1.getCount() == 0) {
            Toast.makeText(this, "No data in the database", Toast.LENGTH_SHORT).show();
        } else {
            while (res1.moveToNext()) {
                list.add(res1.getString(2));
                adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list);
                adapter1 = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_2,array);
                listView.setAdapter(adapter);
            }

        }
    }


 --------------------------------------------------------------------------

  autocompletetextview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                                       @Override
                                       public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                                           try {

                                               Cursor res2 = mydb.getAllData1();
                                               if (res2.getCount() == 0) {
                                                   Toast.makeText(shopp.this, "no item added", Toast.LENGTH_SHORT).show();
                                               } else {
                                                   while (res2.moveToNext()) {
                                                       et8.setText(res2.getString(2));
                                                   }

                                                   {

                                                   }
                                               }
                                           } catch (Exception e) {
                                               Toast.makeText(shopp.this, "Oops something went wrong", Toast.LENGTH_SHORT).show();
                                           }
                                       }
                                   });

你出错或使事情不必要地复杂化的一个方面是在你的Onite McClick列表中

下面的答案是一个使用游标适配器SimpleCursorAdapter并显示Itemname和Itemprice列的工作示例。另外,单击一个项目会删除所有值,长时间单击会删除一个项目并刷新ListView

但是,游标适配器需要一个列名_id,它希望它是rowid列的值。rowid列是唯一标识行的特殊列,但它通常是隐藏的。返回游标方法getAllData2的代码中的查询利用了这一点,基本上select SQL是从表中选择rowid作为_id,*

由于基础源是游标,因此为您定位的游标可用,因此所有值都可用。因此,无需搜索,只需从光标获取值即可。onItemClick/onItemLongClick的第四个附加参数是_id列中的值rowid,可用于查找示例中的特定行。onItemLongClick使用该参数删除该行

数据库帮助程序DBHelper.java:-


嘿,阿廷帕尔,你能分享数据库连接的代码,数据库方法和数据检索功能吗?进一步解释这个问题,并给出一些代码和崩溃日志。很难想象我能分享我的代码先生@msure@NIKHILMAURYA先生我能解释我分享了我的代码先生请帮助我很多先生,我会试试这个
public class DBHelper extends SQLiteOpenHelper {

    public static final String DBNAME = "mydb";
    public static final int DBVERSION = 1;

    public static final String Tname = "mytable";
    public static final String COL_ITEMNAME = "itemname";
    public static final String COL_ITEMPRICE = "itemprice";

    String crt_tbl = "CREATE TABLE IF NOT EXISTS " + Tname + "(" +
            COL_ITEMNAME + " TEXT UNIQUE," +
            COL_ITEMPRICE + " REAL DEFAULT 0.0" +
            ")";

    public DBHelper(Context context) {
        super(context, DBNAME, null, DBVERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(crt_tbl);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int i, int i1) {

    }

    public long addItem(String itemname, Double itemprice) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues cv = new ContentValues();
        cv.put(COL_ITEMNAME,itemname);
        cv.put(COL_ITEMPRICE, itemprice);
        return db.insert(Tname,null,cv);
    }

    //<<<<<<<<<< NOT USED
    public Cursor getAllData1() {
        SQLiteDatabase db = this.getWritableDatabase();
        return db.rawQuery("select * from " + Tname, null);
    }

    //<<<<<<<<<< ALTERNATIVE USED 
    public Cursor getAllData2() {
        SQLiteDatabase db = this.getWritableDatabase();
        String[] columns = new String[]{"rowid AS " + BaseColumns._ID,"*"}; //<<<<<<<<<< see Note below
        return db.query(Tname,columns,null,null,null,null,null);
    }

    public int deleteItemByRowid(long id) {
        String whereclause = "rowid" + "=?";
        String[] whereargs = new String[]{String.valueOf(id)};
        SQLiteDatabase db = this.getWritableDatabase();
        return db.delete(Tname,whereclause,whereargs);
    }
}
public class MainActivity extends AppCompatActivity {

    ListView mListView;
    DBHelper mydb;
    Cursor mCsr;
    SimpleCursorAdapter mSCA;
    Context mContext;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mContext = this;
        mListView = this.findViewById(R.id.listview);
        mydb = new DBHelper(this);
        addSomeDataForTesting(); //<<<<<<<<<< Add some test data
        doListView(); //<<<<<<<<<< setup the listview
    }

    private void doListView() {
        mCsr = mydb.getAllData2();
        if (mSCA == null) {
            mSCA = new SimpleCursorAdapter(this,
                    android.R.layout.simple_list_item_2,
                    mCsr,
                    new String[]{
                            DBHelper.COL_ITEMNAME,
                            DBHelper.COL_ITEMPRICE
                    },
                    new int[]{
                            android.R.id.text1,
                            android.R.id.text2
                    },
                    0
            );
            mListView.setAdapter(mSCA);

            // Set the onItemClick Listener
            mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                    Toast.makeText(mContext,
                            "You clicked on " + mCsr.getString(mCsr.getColumnIndex(DBHelper.COL_ITEMNAME)) +
                                    ". The Price is " + String.valueOf(mCsr.getDouble(mCsr.getColumnIndex(DBHelper.COL_ITEMPRICE))) +
                                    ". The rowid is " + String.valueOf(mCsr.getLong(mCsr.getColumnIndex(BaseColumns._ID))) +
                                    ". Alternately the rowid is " + String.valueOf(l), //<<<<<<<<<< l is the value of the column _id
                            Toast.LENGTH_SHORT
                            ).show();
                }
            });
            mListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
                @Override
                public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
                    mydb.deleteItemByRowid(l); //<<<<<<<<< uses the value of the 4th parameter passed which is the value of the _id column (which should be the rowid)
                    doListView();
                    return true;
                }
            });
        } else {
            mCsr = mydb.getAllData2();
            mSCA.swapCursor(mCsr);
        }
    }

    private void addSomeDataForTesting() {
        if (DatabaseUtils.queryNumEntries(mydb.getWritableDatabase(),DBHelper.Tname) < 1) {
            mydb.addItem("Item 1",25.55);
            mydb.addItem("Item 2",50.99);
            mydb.addItem("Item 3", 125.35);
        }
    }
}