Java Android SQlite数据检索错误

Java Android SQlite数据检索错误,java,android,sqlite,Java,Android,Sqlite,我正在开发一款Android应用程序。。其中我使用了SQLite数据库来存储值,我有两个按钮->保存来保存数据和保存的数据来显示存储的数据 当用户单击任何一行保存的数据时,必须显示特定的数据,但我的问题是,当用户按下任何一行时,只会显示最后一行,而不是按下的行 请检查并帮助我 我的活动是: public void saveddata(View V) { Cursor c = db.rawQuery("SELECT * from Data", null); int count =

我正在开发一款Android应用程序。。其中我使用了
SQLite
数据库来存储值,我有两个
按钮
->保存来保存数据和保存的数据来显示存储的数据

当用户单击任何一行保存的数据时,必须显示特定的数据,但我的问题是,当用户按下任何一行时,只会显示最后一行,而不是按下的行

请检查并帮助我

我的
活动是:

public void saveddata(View V)
{
    Cursor c = db.rawQuery("SELECT * from Data", null);
    int count = c.getCount();
    c.moveToFirst();
    TableLayout tableLayout = new TableLayout(getApplicationContext());
    tableLayout.setVerticalScrollBarEnabled(true);
    TableRow tableRow;
    TextView textView1, textView2,textView3,textView4,textView5;
    tableRow = new TableRow(getApplicationContext());         
    textView1 = new TextView(getApplicationContext());
    textView1.setText("FirstName");
    textView1.setTextColor(Color.RED);
    textView1.setTypeface(null, Typeface.BOLD);
    textView1.setPadding(10, 10, 10, 10);
    tableRow.addView(textView1);

    textView2 = new TextView(getApplicationContext());
    textView2.setText("LastName");
    textView2.setTextColor(Color.RED);
    textView2.setTypeface(null, Typeface.BOLD);
    textView2.setPadding(10, 10, 10, 10);
    tableRow.addView(textView2);

    tableLayout.addView(tableRow);

    for(Integer j=0; j<count; j++)
    {
        tableRow = new TableRow(getApplicationContext());
        textView3= new TextView(getApplicationContext());
        textView3.setText(c.getString(c.getColumnIndex("fname")));
        textView3.setClickable(true);

        ett1=textView3.getText().toString();
        //datas11=textView3.getText().toString();

        textView4 = new TextView(getApplicationContext());
        textView4.setText(c.getString(c.getColumnIndex("mname")));
        textView4.setClickable(true);
        ett2=textView4.getText().toString();
        //datas12=textView4.getText().toString();

        textView5 = new TextView(getApplicationContext());
        textView5.setText(c.getString(c.getColumnIndex("lname")));
        textView5.setClickable(true);
        ett3=textView5.getText().toString();
        //datas13=textView7.getText().toString();

        textView3.setPadding(10, 10, 10,10);
        textView5.setPadding(10, 10, 10, 10);
        tableRow.addView(textView3);
        tableRow.addView(textView5);
        tableLayout.addView(tableRow);
        c.moveToNext();

        textView3.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                Intent intent = new Intent(MainActivity.this ,SavedDate.class);
                intent.putExtra("ett1",ett1 + "");
                intent.putExtra("ett2",ett2 + "");
                intent.putExtra("ett3",ett3 + "");

                startActivity(intent);
            }
        });
    }

    setContentView(tableLayout);

    db.close();
}
public void saveddata(视图五)
{
游标c=db.rawQuery(“从数据中选择*”,null);
int count=c.getCount();
c、 moveToFirst();
TableLayout TableLayout=新的TableLayout(getApplicationContext());
tableLayout.setVerticalScrollBarEnabled(true);
TableRow TableRow;
文本视图文本视图1、文本视图2、文本视图3、文本视图4、文本视图5;
tableRow=新的tableRow(getApplicationContext());
textView1=新的TextView(getApplicationContext());
textView1.setText(“名字”);
textView1.setTextColor(Color.RED);
textView1.setTypeface(null,Typeface.BOLD);
textView1.setPadding(10,10,10,10);
tableRow.addView(textView1);
textView2=新的TextView(getApplicationContext());
textView2.setText(“姓氏”);
textView2.setTextColor(Color.RED);
textView2.setTypeface(null,Typeface.BOLD);
textView2.setPadding(10,10,10,10);
tableRow.addView(textView2);
tableLayout.addView(tableRow);

对于(整数j=0;j原因是动态创建的textview覆盖了textview的click事件。因此,在for循环结束时,last click事件将指向最后一条记录。您可以使用自定义listview来代替此动态生成的表行,并在单击时显示相应的数据。如果您希望一个示例listview和Sqlite数据库。

嘿,这是您的新更新代码,这将对您有所帮助

 Cursor c = db.rawQuery("SELECT * from Data", null);
int count = c.getCount();
c.moveToFirst();
 TableLayout table=new TableLayout;
                  table.setGravity(Gravity.CENTER);

      table.setStretchAllColumns(true);
      table.setShrinkAllColumns(true);

                TableRow rowLabels = new TableRow(this);
                rowLabels.setLayoutParams(new LayoutParams(
                        LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

                rowLabels.setBackgroundDrawable(getResources().getDrawable(
                        R.xml.tablerow));

                TextView srnoLabel = new TextView(this);
                srnoLabel.setText("FirstName");
                srnoLabel.setTypeface(Typeface.SERIF, Typeface.BOLD);
                srnoLabel.setTextColor(Color.RED);
                srnoLabel.setPadding(40, 5, 0, 5);
                srnoLabel.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 17);
                rowLabels.addView(srnoLabel);

                TextView pLabel = new TextView(this);
                pLabel.setText("Middle Name");
                pLabel.setTypeface(Typeface.SERIF, Typeface.BOLD);
                pLabel.setTextColor(Color.RED);
                pLabel.setPadding(20, 5, 0, 5);
                pLabel.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 17);
                rowLabels.addView(pLabel);

                TextView valLabel = new TextView(this);
                valLabel.setText("Last Name");
                valLabel.setTypeface(Typeface.SERIF, Typeface.BOLD);
                valLabel.setTextColor(Color.RED);
                valLabel.setPadding(40, 5, 0, 5);
                valLabel.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 17);
                rowLabels.addView(valLabel);
                rowLabels.setPadding(0, 0, 10, 0);


if (c.moveToFirst()) {
                    do {
                    String f_name = c.getString(c
                                .getColumnIndex("fname"));
                    String l_name = c.getString(c
                                .getColumnIndex("lname"));
                    String m_name = c.getString(c
                                .getColumnIndex("mname"));      

                    TableRow rowdata = new TableRow(this);
                        rowdata.setLayoutParams(new LayoutParams(
                                LayoutParams.WRAP_CONTENT,
                                LayoutParams.WRAP_CONTENT));
                        // 1 column
                        TextView f_txt = new TextView(this);

                        f_txt.setText(Integer.toString(count));
                        f_txt.setPadding(50, 3, 10, 3);
                        f_txt.setText(f_name);
                        f_txt.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 17);
                        f_txt.setTextColor(Color.BLACK);
                        f_txt.setClickable(true);
                        rowdata.addView(f_txt);


                    // 2 column
                        final TextView m_txt = new TextView(this);
                        m_txt.setText(m_name);
                        m_txt.setPadding(15, 3, 10, 3);
                        m_txt
                                .setTextSize(TypedValue.COMPLEX_UNIT_DIP, 17);
                        m_txt.setTextColor(Color.BLACK);
                        rowdata.addView(m_txt);

                            // 3 column
                        final TextView l_txt = new TextView(this);
                        l_txt.setText(l_name);
                                //Annual_crop_loss.toString());
                        l_txt.setPadding(45, 3, 10, 3);
                        l_txt.setTextSize(
                                TypedValue.COMPLEX_UNIT_DIP, 17);
                        l_txt.setTextColor(Color.BLACK);
                        rowdata.addView(m_txt);
                        rowdata.setPadding(1, 1, 1, 1);

                    table.addView(rowLabels);
                        table.addView(rowdata);
                    }

                    } while (c.moveToNext());

                    table.setPadding(10, 10, 10, 10);
                    setContentView(table);
                }   
finally {
        if (dbase != null)
            // newDB.execSQL("DELETE FROM " + tableName);
            c.close();
            dbase.close();
    }

保存时存储一个
Id
,并将该
Id
传递给下一个活动,然后使用该
Id
create方法获取数据,该方法将从数据库获取数据并将数据分配给listview。然后,您可以使用listview的
setOnItemClickListener
,这将帮助您获取特定行。请检查此链接。上面的示例不起作用?或者您想在自己的代码中修改?并且您还可以将clickListener添加到loop.rowdata.setOnClickListener(新OnClickListener(){public void onClick(视图v){}})中的每一行中;