我正在尝试将通过SQLite创建的数据库中的数据导入listview,我有一个SQL查询,可以从不同的表中获取数据。 这是我的数据库图表:
我的活动历史只包含一个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时,一切都会出错: 之前:
后:
有什么想法可以帮助吗?我搜索了很多教程,但他们正在一张桌子上工作,但它并没有真正有用。 谢谢!
答案 0 :(得分: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个参数,从我看到的是填充ListView是多余的,因此删除了看似不必要的代码。
第二个问题是SimpleCursorAdapter使用Cursor并期望按照SimpleCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to, int flags)
https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html传递游标。因此,添加 mCsr 作为第3个参数。
注意!这是原则上的代码,尚未经过测试。