在表格中显示数据库(Android Studio)

时间:2015-09-20 12:03:05

标签: android mysql

我想让数据库的条目显示在Activity中的Rows中。我创建了一个Row Class来设置每一行的布局。

当我运行此代码时,我的循环似乎不起作用 - 它只显示我的数据库的第一个条目。我确定我只是缺少一行代码来创建下一行。有人可以看看它,也许看看我哪里出错了?

public class ReviewActivity extends ActionBarActivity {

myname.project20.DatabaseHelper1 Db_Today;
LinearLayout reviewcontainer;

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

    Db_Today = new DatabaseHelper1(this);
    reviewcontainer = (LinearLayout)findViewById(R.id.reviewcontainer);


    LayoutInflater layoutInflater =
            (LayoutInflater) getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    final View addView = layoutInflater.inflate(R.layout.db1row, null);
    TextView textViewRowReview = (TextView)addView.findViewById(R.id.textViewRowReview);

    Cursor res = Db_Today.getAllData();


    while (res.moveToNext()) {
        textViewRowReview.setText(
                "Name: " + res.getString(1) + "\n" + "Age: " +
                res.getString(2) + "\n" + "Gender: " + res.getString(3) + "\n\n");
    }

    Button buttonRemove = (Button)addView.findViewById(R.id.button_x);
    buttonRemove.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v) {
            ((LinearLayout) addView.getParent()).removeView(addView);
        }});

    reviewcontainer.addView(addView);
}

db1.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
    android:id="@+id/button_x"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:text="x"/>
<TextView
    android:id="@+id/textViewRowReview"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_toLeftOf="@id/button_x"/>

ReviewActivity.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context=".MainActivity" >


<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >
    <TextView android:text="Review and Modify Today's Data Here"
        android:id="@+id/TextViewReview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</LinearLayout>


<LinearLayout
    android:id="@+id/reviewcontainer"
    android:layout_width="match_parent"
    android:layout_height="250dp"
    android:orientation="horizontal">
</LinearLayout>
</LinearLayout>

我认为这是DatabaseHelper1.java唯一重要的摘录

    public Cursor getAllData(){
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor res = db.rawQuery("select * from " + TABLE_NAME, null);
    return res;
}

如果您需要任何进一步的信息,请告诉我!非常感谢你的帮助&lt; 3

2 个答案:

答案 0 :(得分:0)

我看到了你的错误。在本节中:

TextView textViewRowReview = (TextView)addView.findViewById(R.id.textViewRowReview);

Cursor res = Db_Today.getAllData();


while (res.moveToNext()) {
    textViewRowReview.setText(

textViewRowReview只是一个TextView,它将继续被查询返回的每个后续行覆盖。您需要ListView代替。

如何填充这是另一回事。我建议您使用CursorLoader某种风格,但由于您已经在等待查询同步返回,因此您可能会发现ArrayAdapter更简单的替代方案。

         ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
          android.R.layout.simple_list_item_1, android.R.id.text1, values);
        // Assign adapter to ListView
        listView.setAdapter(adapter); 

通过迭代values

填充Cursor的位置
while (res.moveToNext()) {
    values.add(new String(
            "Name: " + res.getString(1) + "\n" + "Age: " +
            res.getString(2) + "\n" + "Gender: " + res.getString(3) + "\n\n");
}

这假设valuesArrayList<String>,在这种情况下,您可能会从阅读https://github.com/codepath/android_guides/wiki/Using-an-ArrayAdapter-with-ListView中受益

答案 1 :(得分:0)

您尝试多次填充相同的TextView。因此,光标的最后结果将设置为TextView。 我建议创建一个ListView并用适配器填充它,然后在适配器中设置行项。