用于sqlite数据库的Simplecursor适配器,包含四个包含日期的列

问题描述 投票:0回答:1

我正在尝试将通过SQLite创建的数据库中的数据导入listview,我有一个从不同表中获取数据的SQL查询。这是我的数据库图:

Diagram DB

我的活动历史只包含一个listView,我的适配器包含4个textviews。这是代码:

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


        <LinearLayout
            android:layout_width="202dp"
            android:layout_height="wrap_content"
            android:layout_weight="33.3"
            android:orientation="vertical">

            <TextView
                android:id="@+id/txtnoom"
                android:layout_width="214dp"
                android:layout_height="30dp"
                android:gravity="center"
                android:text="nom" />

            <TextView
                android:id="@+id/hdate"
                android:layout_width="213dp"
                android:layout_height="30dp"
                android:gravity="center"
                android:text="date" />
        </LinearLayout>

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="33.3">

        <TextView
            android:gravity="center"
            android:text="question"
            android:layout_width="match_parent"
            android:layout_height="30dp"
            android:id="@+id/txthistq"/>

        <TextView
            android:gravity="center"
            android:text="réponse"
            android:layout_width="match_parent"
            android:layout_height="30dp"
            android:id="@+id/txthistr"
            android:layout_below="@+id/textView2"/>
    </LinearLayout>
    </LinearLayout>

在我的modelhelper中,我写了这个函数:

public Cursor getTableHistoAsCursor(){SQLiteDatabase db = this.getReadableDatabase();返回db.rawQuery(“SELECT Q.”+ KEY_QUESTION +“,U。”+ KEY_NOM +“,U。”+ KEY_PRENOM +“,A。”+ KEY_DATE +“,”+ KEY_REPONSE +“来自”+ TABLE_QUESTION +“ Q,“+ TABLE_USER +”U,“+ TABLE_ANSWER +”A WHERE Q.“+ KEY_ID_QUESTION +”= A.“+ KEY_ID_QUESTION +”AND A.“+ KEY_MATRICULE +”= U.“+ KEY_MATRICULE,null); }

它使用sqlQuery返回一个游标。

我班的代码是:

 ModelHelper openhelper; 
    SimpleCursorAdapter mSCA;
    SQLiteDatabase db;
    Cursor mCsr;
    ListView mListView;
    ArrayList<Historique> histList;
    Historique histo;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_historique);
        mListView = (ListView) findViewById(R.id.lsthisto); //<<<< Note 3
        openhelper =  new ModelHelper(this);
        db = openhelper.getReadableDatabase();
        histList = new ArrayList<>();


        mCsr = openhelper.getTableHistoAsCursor();
        int rows = mCsr.getCount();
        if (rows == 0 ){
            Toast.makeText(Historique.this, "No histo", Toast.LENGTH_SHORT).show();
        } else {
            while (mCsr.moveToNext()){
                histo = new Historique (mCsr.getInt(0),mCsr.getString(1), mCsr.getString(2),mCsr.getString(3))
            }
        }

        mSCA = new SimpleCursorAdapter(this,
                R.layout.activity_historique, //<<<< Note 2
                new String[]{openhelper.KEY_NOM, openhelper.KEY_QUESTION, openhelper.KEY_REPONSE, openhelper.KEY_DATE}, //<<<< Note 4
                new int[]{R.id.txtnoom, R.id.txthistq, R.id.txthistr, R.id.hnate}, //<<<< Note 5
                0
        );
        mListView.setAdapter(mSCA);
    }

问题是我的代码没有从一个表中获取数据,因此表的答案只有它在其他表中搜索的ID,构造函数historique()不能使用:这里是错误:

然后当我添加日期的textview时,一切都会出错:之前:

后:

有什么想法可以帮助吗?我搜索了很多教程,但他们正在一张桌子上工作,但它并没有真正有用。谢谢!

android sqlite listview simplecursoradapter
1个回答
0
投票

如果我理解正确,请更改: -

    mCsr = openhelper.getTableHistoAsCursor();
    int rows = mCsr.getCount();
    if (rows == 0 ){
        Toast.makeText(Historique.this, "No histo", Toast.LENGTH_SHORT).show();
    } else {
        while (mCsr.moveToNext()){
            histo = new Historique (mCsr.getInt(0),mCsr.getString(1), mCsr.getString(2),mCsr.getString(3))
        }
    }

    mSCA = new SimpleCursorAdapter(this,
            R.layout.activity_historique, //<<<< Note 2
            new String[]{openhelper.KEY_NOM, openhelper.KEY_QUESTION, openhelper.KEY_REPONSE, openhelper.KEY_DATE}, //<<<< Note 4
            new int[]{R.id.txtnoom, R.id.txthistq, R.id.txthistr, R.id.hnate}, //<<<< Note 5
            0
    );
    mListView.setAdapter(mSCA);

至 :-

    mCsr = openhelper.getTableHistoAsCursor();
    mSCA = new SimpleCursorAdapter(this,
            R.layout.activity_historique, //<<<< Note 2
            mCsr, //<<<<<<<<<<<<<<<<<<< ADDED
            new String[]{openhelper.KEY_NOM, openhelper.KEY_QUESTION, openhelper.KEY_REPONSE, openhelper.KEY_DATE}, //<<<< Note 4
            new int[]{R.id.txtnoom, R.id.txthistq, R.id.txthistr, R.id.hnate}, //<<<< Note 5
            0
    );
    mListView.setAdapter(mSCA);
  • Historique类没有带有4个参数的Constructor,从我看到的是填充ListView是多余的,因此删除了看似不必要的代码。
  • 第二个问题是SimpleCursorAdapter使用Cursor并期望根据SimpleCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to, int flags) SimpleCursorAdapter传递游标。因此添加mCsr作为第3个参数。

注意!这是原则上的代码,尚未经过测试。

© www.soinside.com 2019 - 2024. All rights reserved.