数据库查询到ListActivity

时间:2011-06-13 22:18:08

标签: android listview listactivity

我不确定我是否正确行事,因为我对这种编程语言知之甚少......或者其他任何事情。让我们看看我是否能让它变得有意义,这样我才能得到一些帮助。

我正在对我的数据库运行查询以提取数据库中的所有条目

DBAdapter.java的一部分:

//***RETRIEVES ALL THE FINALSCORES***//
public Cursor getAllFinalscores()
{
    return db.query(DATABASE_TABLE, new String[] {
            KEY_ROWID,
            KEY_DATE,
            KEY_FINALSCORE,
            KEY_HOLESPLAYED},
            null, null, null, null, null);
}

然后我创建了一个扩展ListActivity的独立类(因为我希望所有内容都显示在listview中。

PastGames.java

import android.app.ListActivity;
import android.database.Cursor;
import android.os.Bundle;
import android.widget.ArrayAdapter;

public class PastGames extends ListActivity {

@Override

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.pastgames);



    DBAdapter db = new DBAdapter(this);

    db.open();
    Cursor c = db.getAllFinalscores();
    if (c.moveToFirst())
    {
        do {
            String[] listData = new String [] {c.getString(1),
                    c.getString(2), c.getString(3)};
            this.setListAdapter(new ArrayAdapter<String>(this,
                    R.layout.pastgames, listData));
        }
        while (c.moveToNext());
    }
    db.close();


}

}

然后我从我的Main活动中调用它(只是要注意,不会扩展ListActivity

    @Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {
case R.id.past_games:
            Intent intentListGames = new Intent().setClass( this, PastGames.class );
            this.startActivityForResult( intentListGames, 0 );
            return true;
   }
        return true;
    }

所以,如果我理解正确,我从我的主要活动(然后启动PastGames.java)和PastGames.java中调用PastGames.java - onCreate我打开数据库,运行我的查询,关闭并希望放置进入listview

当我在模拟器中运行该选项时,我在LogCat中得到以下内容:

06-13 22:10:36.581: ERROR/AndroidRuntime(204): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.deckert/com.deckert.PastGames}: java.lang.ClassCastException: android.widget.TextView
06-13 22:10:36.581: ERROR/AndroidRuntime(204):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
06-13 22:10:36.581: ERROR/AndroidRuntime(204):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
06-13 22:10:36.581: ERROR/AndroidRuntime(204):     at android.app.ActivityThread.access$2200(ActivityThread.java:119)

有人可以帮我理解为什么这不起作用吗?

提前谢谢你,我为这个巨大的帖子道歉!

2 个答案:

答案 0 :(得分:1)

您在ArrayAdapter和您的PastGames Activity根视图中使用相同的布局。我想你不想在活动布局中使用ListView的布局。我认为这是导致ClassCastException的原因,因为您的ListView布局可能被定义为只使用一个简单的TextView,并且活动正在爆炸说它无法投射ListViewTextView

答案 1 :(得分:1)

您没有正确创建要传递给listView的适配器。如果您查看适配器的构造函数,则正在等待TextView。对于主布局和此textView,您没有相同的资源。我认为您需要创建Textview并将其传递给构造函数;)