Android 使用arrayadapter在listview中显示数据库中的数据
嗨,伙计们 我有个问题。我的应用程序应在列表视图中显示所有路线。但是arrayadapter有点问题。如果我像这样尝试我的arrayadapter:Android 使用arrayadapter在listview中显示数据库中的数据,android,sqlite,listview,cursor,android-arrayadapter,Android,Sqlite,Listview,Cursor,Android Arrayadapter,嗨,伙计们 我有个问题。我的应用程序应在列表视图中显示所有路线。但是arrayadapter有点问题。如果我像这样尝试我的arrayadapter: ArrayAdapter<DefineRoute> adapter = new ArrayAdapter<DefineRoute>( this, android.R.layout.simple_list_item_1,verbindungen.getVerbindungen()); 以下是我
ArrayAdapter<DefineRoute> adapter = new ArrayAdapter<DefineRoute>(
this, android.R.layout.simple_list_item_1,verbindungen.getVerbindungen());
以下是我的活动:
public class Verbindungen {
SQLiteDatabase db;
LinkedList<DefineRoute> route;
DefineRoute[] routeArray;
Context context;
DatabaseHelper myDbHelper = null;
public Verbindungen(Context context) {
route = new LinkedList<DefineRoute>();
this.context = context;
myDbHelper = new DatabaseHelper(context);
}
public DefineRoute[] getVerbindungen() {
try {
myDbHelper.createDataBase();
} catch (IOException ioe) {
throw new Error("Unable to create database");
}
try {
myDbHelper.openDataBase();
}catch(SQLException sqle){
throw sqle;
}
db = myDbHelper.getReadableDatabase();
// Alle Daten der Datenbank abrufen mithilfe eines Cursors
Cursor cursor = db.rawQuery("SELECT strftime('%H:%M', f.abfahrt) AS Abfahrt," +
"strftime('%H:%M', f.ankunft) AS Ankunft," +
"strftime('%H:%M', strftime('%s',f.ankunft)- strftime('%s',f.abfahrt), 'unixepoch') AS Dauer," +
"r.name AS Route," +
"count(u.fahrt_id) AS Umstiege " +
"FROM scotty_fahrt f " +
"JOIN scotty_haltestelle start ON f.start_id = start.id " +
"JOIN scotty_haltestelle ziel ON f.ziel_id = ziel.id " +
"JOIN scotty_route r ON f.route_id = r.id " +
"LEFT OUTER JOIN scotty_umstiegsstelle u ON f.id = u.fahrt_id " +
"WHERE start.name = 'Linz/Donau Hbf (Busterminal)' " +
"AND ziel.name = 'Neufelden Busterminal (Schulzentrum)' " +
"GROUP BY u.fahrt_id",null);
cursor.moveToFirst();
int i=0;
while (cursor.moveToNext()){
//in this string we get the record for each row from the column "name"
i++;
}
routeArray = new DefineRoute[i];
cursor.moveToFirst();
int k =0;
while (cursor.moveToNext())
{
routeArray[k] = new DefineRoute(cursor.getString(0),cursor.getString(1),cursor.getString(2),
cursor.getString(3));
k++;
}
//here we close the cursor because we do not longer need it
//}
cursor.close();
myDbHelper.close();
return routeArray;
}
public类Verbindungen{
sqlitedb数据库;
链接列表路径;
明确[]路线;
语境;
DatabaseHelper myDbHelper=null;
公共逐字逐句(上下文){
路由=新的LinkedList();
this.context=上下文;
myDbHelper=新数据库助手(上下文);
}
公共定义输出[]getVerbindungen(){
试一试{
myDbHelper.createDataBase();
}捕获(ioe异常ioe){
抛出新错误(“无法创建数据库”);
}
试一试{
myDbHelper.openDataBase();
}捕获(SQLException sqle){
抛出sqle;
}
db=myDbHelper.getReadableDatabase();
//所有的日期都在银行里
Cursor Cursor=db.rawQuery(“选择strftime('%H:%M',f.abfahrt)作为abfahrt,”+
strftime(“%H:%M”,f.ankunft)作为ankunft+
strftime('%H:%M',strftime('%s',f.ankunft)-strftime('%s',f.abfahrt),'unixepoch')作为Dauer+
“r.name作为路由,”+
“将(u.fahrt_id)计数为Umstiege”+
“来自scotty_fahrt f”+
“加入scotty_haltestelle开始于f.start_id=start.id”+
“在f.ziel_id=ziel.id上加入scotty_haltestelle ziel”+
“在f.route_id=r.id上加入scotty_路线r”+
“f.id=u.fahrt\u id上的左外连接scotty_umstiegsstelle u”+
“其中start.name='Linz/Donau Hbf(Busterminal)'”+
“和ziel.name='Neufelden Busterminal(Schulzentrum)'+
“按u.fahrt_id分组”,空);
cursor.moveToFirst();
int i=0;
while(cursor.moveToNext()){
//在这个字符串中,我们从“name”列获取每一行的记录
i++;
}
routeArray=新定义的输出[i];
cursor.moveToFirst();
int k=0;
while(cursor.moveToNext())
{
routeArray[k]=新定义的输出(cursor.getString(0)、cursor.getString(1)、cursor.getString(2),
getString(3));
k++;
}
//这里我们关闭光标,因为我们不再需要它
//}
cursor.close();
myDbHelper.close();
返回路线;
}
请帮帮我
现在,我正在创建一个ArrayAdapter类,在该类中,我使用以下命令在listview中定义输出:
public class RouteAdapter extends ArrayAdapter<DefineRoute>{
Activity context;
DefineRoute[] defineroute;
public RouteAdapter(Activity context, DefineRoute[] defineroute){
super(context, R.layout.layoutausgabe, defineroute);
this.defineroute = defineroute;
this.context = context;
}
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = context.getLayoutInflater();
View row = inflater.inflate(R.layout.layoutausgabe,null);
TextView txZeit = (TextView)row.findViewById(R.id.txZeit);
TextView txDauer = (TextView)row.findViewById(R.id.txDauer);
TextView txUmstieg = (TextView)row.findViewById(R.id.txUmstieg);
DefineRoute defineRoute = defineroute[position];
txZeit.setText(defineRoute.getAbfahrtszeit() + " - " + defineRoute.getAnkunftszeit());
txDauer.setText(defineRoute.getDauer());
txUmstieg.setText(defineRoute.getUmstieg());
return row;
}
}
公共类RouteAdapter扩展了ArrayAdapter{
活动语境;
定义输出[]定义输出;
公共路由适配器(活动上下文,DefineRoute[]DefineRoute){
super(上下文,R.layout.layoutusgabe,defineroute);
this.defineroute=defineroute;
this.context=上下文;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
LayoutInflater充气器=上下文。getLayoutInflater();
视图行=充气机。充气(R.layout.layoutusgabe,null);
TextView txZeit=(TextView)row.findViewById(R.id.txZeit);
TextView txDauer=(TextView)row.findviewbyd(R.id.txDauer);
TextView txUmstieg=(TextView)row.findViewById(R.id.txUmstieg);
DefineRoute DefineRoute=DefineRoute[位置];
txZeit.setText(definerout.getAbfahrtszeit()+“-”+definerout.getAnkunftszeit());
txDauer.setText(defineRoute.getDauer());
txUmstieg.setText(defineRoute.getUmstieg());
返回行;
}
}
我该如何继续?
我的适配器应该是什么样子?你的
数组适配器是字符串的类型,所以将字符串列表传递给它的构造函数,而不是verbindungen.getVerbindungen()
对象列表。arrandapter是你可以使用的任何类型的类
在您的例子中,ArrayAdapter需要重写DefineRoute类的字符串方法
就你而言
@Override
public String toString() {
return ankunftszeit+" "+ankunftszeit;
//or what ever you want to displat
}
或者还有另一种解决方案,即通过BaseAdapter类创建您自己的适配器扩展。编程时首先使用国际语言,而不是Deutsch,第二,使用基于游标的类例如SimpleCursorAdaptet我实际上为ArrayAdapter创建了一个类浪费时间和内存:当你有游标时,SimpleCursorAdapter是一个明显的选择是的,但我需要在listview中有一个特定的布局而不是标准SCA不使用任何std布局是的,我试过了,我已经创建了一个类routeAdapter我为我的适配器定义了一个布局,但现在请帮助我。在其他类中,一切都与以前相同,但我添加了此活动:公共类RouteDapter扩展了ArrayAdapter{Activity context;DefineRoute[]DefineRoute;公共RouteDapter(Activity context,DefineRoute[]DefineRoute){super(context,R.layout.LayoutusGabe,DefineRoute);this.defineroute=defineroute;this.context=context;}public View getView(int position,View convertView,ViewGroup parent){您面临什么问题..?数组适配器有问题。因为他是Arrayadapter,这不起作用,但我需要它,因为我想显示字符串元素你能帮帮我吗我不知道你的意思
public class Verbindungen {
SQLiteDatabase db;
LinkedList<DefineRoute> route;
DefineRoute[] routeArray;
Context context;
DatabaseHelper myDbHelper = null;
public Verbindungen(Context context) {
route = new LinkedList<DefineRoute>();
this.context = context;
myDbHelper = new DatabaseHelper(context);
}
public DefineRoute[] getVerbindungen() {
try {
myDbHelper.createDataBase();
} catch (IOException ioe) {
throw new Error("Unable to create database");
}
try {
myDbHelper.openDataBase();
}catch(SQLException sqle){
throw sqle;
}
db = myDbHelper.getReadableDatabase();
// Alle Daten der Datenbank abrufen mithilfe eines Cursors
Cursor cursor = db.rawQuery("SELECT strftime('%H:%M', f.abfahrt) AS Abfahrt," +
"strftime('%H:%M', f.ankunft) AS Ankunft," +
"strftime('%H:%M', strftime('%s',f.ankunft)- strftime('%s',f.abfahrt), 'unixepoch') AS Dauer," +
"r.name AS Route," +
"count(u.fahrt_id) AS Umstiege " +
"FROM scotty_fahrt f " +
"JOIN scotty_haltestelle start ON f.start_id = start.id " +
"JOIN scotty_haltestelle ziel ON f.ziel_id = ziel.id " +
"JOIN scotty_route r ON f.route_id = r.id " +
"LEFT OUTER JOIN scotty_umstiegsstelle u ON f.id = u.fahrt_id " +
"WHERE start.name = 'Linz/Donau Hbf (Busterminal)' " +
"AND ziel.name = 'Neufelden Busterminal (Schulzentrum)' " +
"GROUP BY u.fahrt_id",null);
cursor.moveToFirst();
int i=0;
while (cursor.moveToNext()){
//in this string we get the record for each row from the column "name"
i++;
}
routeArray = new DefineRoute[i];
cursor.moveToFirst();
int k =0;
while (cursor.moveToNext())
{
routeArray[k] = new DefineRoute(cursor.getString(0),cursor.getString(1),cursor.getString(2),
cursor.getString(3));
k++;
}
//here we close the cursor because we do not longer need it
//}
cursor.close();
myDbHelper.close();
return routeArray;
}
public class RouteAdapter extends ArrayAdapter<DefineRoute>{
Activity context;
DefineRoute[] defineroute;
public RouteAdapter(Activity context, DefineRoute[] defineroute){
super(context, R.layout.layoutausgabe, defineroute);
this.defineroute = defineroute;
this.context = context;
}
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = context.getLayoutInflater();
View row = inflater.inflate(R.layout.layoutausgabe,null);
TextView txZeit = (TextView)row.findViewById(R.id.txZeit);
TextView txDauer = (TextView)row.findViewById(R.id.txDauer);
TextView txUmstieg = (TextView)row.findViewById(R.id.txUmstieg);
DefineRoute defineRoute = defineroute[position];
txZeit.setText(defineRoute.getAbfahrtszeit() + " - " + defineRoute.getAnkunftszeit());
txDauer.setText(defineRoute.getDauer());
txUmstieg.setText(defineRoute.getUmstieg());
return row;
}
}
@Override
public String toString() {
return ankunftszeit+" "+ankunftszeit;
//or what ever you want to displat
}