【问题标题】:Android: how to populate two different listviews with database?Android:如何用数据库填充两个不同的列表视图?
【发布时间】:2014-05-06 13:28:59
【问题描述】:

我有一个活动,它以毫秒为单位存储带有时间戳的作业。然后,如果该活动实际上是今天或明天,我想要一个列出该活动的所有时间戳和名称的活动。我一开始只是试图在一个列表视图中显示今天所有活动的时间戳。这给了我一个错误,说“_id”不作为列存在。这是我的代码:

public class UpcomingActivity extends Activity implements LoaderManager.LoaderCallbacks<Cursor>{

@SuppressLint("NewApi")
private DatabaseHelper databaseHelper;
private SimpleCursorAdapter mAdapter;
private ListView listView;
private String[] today= new String[5]; //max 5 values
private String[] tom= new String[5]; //max 5 values

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_upcoming);

    databaseHelper = new DatabaseHelper(getApplicationContext());

    SQLiteCursorLoaderActivities cLoader = new SQLiteCursorLoaderActivities(getApplicationContext(),
                                                                                databaseHelper,
                                                                                null,
                                                                                null);

    Cursor c = cLoader.buildCursor();

    c.moveToFirst();
    int todayTracker = 0; 
    int tomTracker = 0; 
    int alltimes = 1;
    long day = 86400000; // length of a day in ms
    String newText;
    TextView testField = (TextView)findViewById(R.id.test);

    listView = (ListView) findViewById(android.R.id.list);
    listView.setEmptyView(findViewById(android.R.id.empty));

    //loop through all records and check if the date is today!
  for(int i=0; i<alltimes;i++){
    long time = c.getInt(i);
    if(DateUtils.isToday(time)){

    newText = String.valueOf(time);

    today[todayTracker] = newText; 
    todayTracker++;
    }
    else{
        time = time + day; //maybe it is tomorrow?
       if(DateUtils.isToday(time)){

            newText = String.valueOf(time);

            tom[tomTracker] = newText; 
            tomTracker++;
            }
    }

  }

    int[] toViews = {android.R.id.text2};

    mAdapter = new SimpleCursorAdapter( getApplicationContext(), 
             R.layout.my_list_element, 
             c, 
             today, 
             toViews, 
             0);

    listView.setAdapter(mAdapter);


    getLoaderManager().initLoader(0, null, this);

}

这是我的日志猫:

05-06 09:16:43.243: E/AndroidRuntime(2025): Caused by: java.lang.IllegalArgumentException: column '_id' does not exist

为什么会出现错误,以及将来如何填充两个不同的列表视图? 谢谢!

【问题讨论】:

    标签: android android-listview simpleadapter


    【解决方案1】:

    为了获取和填充数据到ListViews,来自数据库的每个查询都必须包含一个名为 _id 的列。您必须在光标中包含 _id

    【讨论】:

    • 我现在的查询是:SELECT start FROM activities,应该是什么?
    • @user3353408 :您必须在数据库中包含一个名为 _id 的列,或者使用别名作为数据库的行 id 以返回 _id。所以你的选择应该是选择_id,从活动开始
    • 我试过这个:String query = "SELECT start, rowid _id FROM activities";但它给了我一个空指针异常。
    • 你必须调试你的代码来找出哪一行抛出了 NPE。所以很遗憾我不能帮你更多。
    猜你喜欢
    • 2012-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多