1

いくつかのテーブルを含むデータベースを正常に作成し、rawQueryを使用してすべてのテーブルを正常に選択しました。すべてのテーブルは類似しています。つまり、同じ列に異なる値があります。次に、新しいアクティビティですべてのテーブルを印刷する必要があります。TableLayoutに行を追加して実行したいと思います。新しい各テーブルは、新しい行に印刷されます。

訂正するか、別の方法を示してください。私はこのようにします:

//新しいテーブルを追加する

EditText title = (EditText)findViewById(R.id.Title); 
        String Title = title.getText().toString();

        EditText d = (EditText)findViewById(R.id.director); 
        String Director = d.getText().toString();

                SQLiteDatabase db = openOrCreateDatabase("Films", MODE_PRIVATE, null);
        db.execSQL("CREATE TABLE IF NOT EXISTS " + Title + " (Title VARCHAR, Director VARCHAR);");
        db.execSQL("INSERT INTO " + Title + "(Title) VALUES('" + Title + "');");
        db.execSQL("INSERT INTO " + Title + " (Director) VALUES('" + Director + "');");
        db.close();
        startActivity(new Intent(Add.this, Browse.class));

//選択

SQLiteDatabase db = openOrCreateDatabase("Films", MODE_PRIVATE, null);
     Cursor c = db.rawQuery("SELECT * FROM sqlite_master WHERE type='table'",null);

//新しいタイトルに出会ったときに新しい行を作成しようとしています

c.moveToFirst();
TableLayout tl = (TableLayout)findViewById(R.id.myTableLayout);
while (c.moveToNext())
     {
         if (c.getString(c.getColumnIndex("Title")) != null)
         {
             String Title = c.getString(c.getColumnIndex("Title"));

             TableRow tr = new TableRow(this);
               tr.setLayoutParams(new LayoutParams(
                              LayoutParams.FILL_PARENT,
                              LayoutParams.WRAP_CONTENT));
                    /* Create a Button to be the row-content. */
                    TextView b = new TextView(this);
                    b.setText(Title);
                    b.setLayoutParams(new LayoutParams(
                              LayoutParams.FILL_PARENT,
                              LayoutParams.WRAP_CONTENT));
                    /* Add Button to row. */
                    tr.addView(b);
             tl.addView(tr,new TableLayout.LayoutParams(
                        LayoutParams.FILL_PARENT,
                        LayoutParams.WRAP_CONTENT));
             c.moveToNext();
         }

しかし、DDMSは、行1の列-1からフィールドスロットを取得できないと言っています。

ちなみに、各テーブルには2つの列しかありませんが、CursorWindowには5つの列があると表示されます。

助けてください!

4

2 に答える 2

3

プルしたカーソルにはテーブル名という1つの列しか含まれていません。そのため、そのカーソルに存在しない列にアクセスしようとすると、列エラーが発生します。

そのカーソルのテーブル名を使用してループを設定し、各テーブルのテーブルコンテンツを照会し、テーブルコンテンツカーソルを使用してテーブルを埋める必要があります。

方法によっては、MergeCursorを使用する必要がある場合があります。

編集

返される最初の2つのテーブルはシステムテーブルであるため、それらをスキップして、カーソルの3番目のエントリから開始する必要があります。

c.moveToFirst();
c.moveToPosition(3);  // may be two, not sure if the cursor starts at 0 or 1
while (c.isAfterLast == false) {
    String tblName = c.getString(1);
    Cursor table = db.rawQuery("SELECT * FROM " + tblName,null);
    table.moveToFirst();
    if (table.getString(table.getColumnIndex("Title")) != null) {
        //  Your code to create table
    }
    c.moveToNext();
}
于 2012-05-13T22:34:58.477 に答える
0

テーブルはAndroidで十分にクリアされておらず、予想よりも難しいので、水平テキストビューレイアウトの下に通常のリストビューを入力する新しいトリックを作成しました。これは、データベースからチームのスコアを取得するテーブルです。

主な活動 :

public class ViewAllScores extends ListActivity {


@Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
 setContentView(R.layout.table_total_scores_by_exam);

        generateTable();

    }private void generateTable() {
        // TODO Auto-generated method stub
        setContentView(R.layout.table_total_scores_by_exam);
        mDbHelper = new DBhelp(this);
        mDbHelper.open();
        String ExamID = "1";
        mNotesCursor = mDbHelper.getAllTeamsScoresByExam(ExamID);

        startManagingCursor(mNotesCursor);

        String[] from = new String[] { mDbHelper.KEY_TEAMS_TEAMNAME,
                mDbHelper.KEY_SCORES_TOTALSCORE,
                mDbHelper.KEY_SCORES_TIMEELAPSED };

        int[] to = new int[] { R.id.tblTablesTeamsByExamRowsTeamName,
                R.id.tblTablesTeamsByExamRowsTeamScore,
                R.id.tblTablesTeamsByExamRowsElapsedTime };
        SimpleCursorAdapter notes = new SimpleCursorAdapter(this,
                R.layout.table_teams_by_exams_rows, mNotesCursor, from, to);

        setListAdapter(notes);

    }

データベース活動:

public Cursor getAllTeamsScoresByExam(String examID) {
        // TODO Auto-generated method stub
        String where = KEY_SCORES_SCOREDEXAMID + "=?";

        String[] whereArgs = new String[] { examID };

        Cursor cursor = ourDatabase.query(VIEW_TEAMS_SCORES_BY_EXAM,
                new String[] { KEY_SCORES_SCOREDEXAMID, KEY_SCORES_TIMEELAPSED,
                        KEY_SCORES_TOTALSCORE ,KEY_SCORES_TEAMTRANSID,
                        KEY_TEAMS_TEAMNAME }, where, whereArgs, null, null,
                KEY_SCORES_TOTALSCORE+" DESC");

        return cursor;
    }

R.layout.table_total_scores_by_exam:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:weightSum="99" >

        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="33"
            android:background="@drawable/cell_shape"
            android:gravity="center"
            android:text="Team Name"
            android:textSize="30sp"
            android:textStyle="bold" />

        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="33"
            android:background="@drawable/cell_shape"
            android:gravity="center"
            android:text="Total Score"
            android:textSize="30sp"
            android:textStyle="bold" />

        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="33"
            android:background="@drawable/cell_shape"
            android:gravity="center"
            android:text="Elapsed Time"
            android:textSize="30sp"
            android:textStyle="bold" />
    </LinearLayout>

    <ListView
        android:id="@+id/android:list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>

</LinearLayout>

R.layout.table_teams_by_exams_rows:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:weightSum="99" >

    <TextView
        android:id="@+id/tblTablesTeamsByExamRowsTeamName"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="33"
        android:background="@drawable/cell_shape"
        android:gravity="center"
        android:text="Team Name"
        android:textSize="22sp"
        />

    <TextView
        android:id="@+id/tblTablesTeamsByExamRowsTeamScore"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="33"
        android:background="@drawable/cell_shape"
        android:gravity="center"
        android:text="Total Score"
        android:textSize="22sp"
        />

    <TextView
        android:id="@+id/tblTablesTeamsByExamRowsElapsedTime"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="33"
        android:background="@drawable/cell_shape"
        android:gravity="center"
        android:text="Elapsed Time"
        android:textSize="22sp"
        />

</LinearLayout>

このトリックが役立つことを願っています

于 2013-02-18T11:37:29.960 に答える