如何在 ListView 中显示 SQLite 查询的输出
Posted
技术标签:
【中文标题】如何在 ListView 中显示 SQLite 查询的输出【英文标题】:How to display output of SQLite query in ListView 【发布时间】:2013-01-10 05:55:40 【问题描述】:我正在学习安卓。我正在尝试学习 SQLite 数据库,但我遇到了问题。 我无法读取 Cursor 的输出并将其显示在 ListView 中。这是我的 MainActivity.java 代码-
package com.example.addname;
import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends Activity
Button b1, b2;
EditText t1;
ListView lv1;
SQLiteDatabase db;
Cursor c;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b1 = (Button) findViewById(R.id.button1);
b2 = (Button) findViewById(R.id.button2);
t1 = (EditText) findViewById(R.id.editText1);
lv1 = (ListView) findViewById(R.id.listView1);
db = openOrCreateDatabase("MyDB", MODE_PRIVATE, null);
db.execSQL("CREATE TABLE IF NOT EXISTS Names(Name VARCHAR)");
b1.setOnClickListener(new OnClickListener()
@Override
public void onClick(View arg0)
// TODO Auto-generated method stub
if (t1.getText().toString().equals(""))
t1.setText("Enter Name");
else
String input = t1.getText().toString();
db.execSQL("INSERT INTO Names VALUES(" + "'" + input + "'"
+ ")");
);
b2.setOnClickListener(new OnClickListener()
@Override
public void onClick(View arg0)
// TODO Auto-generated method stub
c = db.rawQuery("SELECT * FROM Names",null);
int count = c.getCount();
String values[] = new String[count+1];
int i = 0;
do
values[i]= c.getString(c.getColumnIndex("Name"));
i++;
while(c.moveToNext());
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getBaseContext(),
android.R.layout.activity_list_item, android.R.id.text1,values);
lv1.setAdapter(adapter);
);
@Override
public boolean onCreateOptionsMenu(Menu menu)
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
这里是 activity_main.xml 代码 -
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
tools:context=".MainActivity" >
<EditText
android:id="@+id/editText1"
android:layout_
android:layout_
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_marginTop="25dp"
android:ems="10" >
<requestFocus />
</EditText>
<Button
android:id="@+id/button1"
android:layout_
android:layout_
android:layout_below="@+id/editText1"
android:layout_centerHorizontal="true"
android:text="@string/button1" />
<ListView
android:id="@+id/listView1"
android:layout_
android:layout_
android:layout_alignParentLeft="true"
android:layout_below="@+id/button2" >
</ListView>
<Button
android:id="@+id/button2"
android:layout_
android:layout_
android:layout_alignLeft="@+id/button1"
android:layout_below="@+id/button1"
android:layout_marginTop="24dp"
android:text="@string/button2" />
</RelativeLayout>
当我点击“显示”按钮时,我收到错误“不幸的是 addname 已停止”(addname 是我的项目名称)。请帮助。
【问题讨论】:
您的问题到底是什么?更具体! 【参考方案1】:使用SimpleCursorAdapter 代替 ArrayAdapter。
c = db.rawQuery("SELECT * FROM Names",null);
while(c.isAfterLast() == false)
c.moveToNext();
ListAdapter adapter = new SimpleCursorAdapter(this,
android.R.layout.activity_list_item,
c,
new String[] "Name",
new int[] android.R.id.text1,0);
lv1.setAdapter(adapter);
【讨论】:
得到错误 - 构造函数 SimpleCursorAdapter(new View.OnClickListener(), int, Cursor, String[], int[], int) 未定义 不要传递 OnClickListener()... 传递当前活动上下文。即this
【参考方案2】:
用这个替换 do...while 部分
while(c.moveToNext())
values[i]= c.getString(c.getColumnIndex("Name"));
i++;
【讨论】:
【参考方案3】: c = db.rawQuery("SELECT * FROM Names",null);
int count = c.getCount();
String values[] = new String[count+1];
int i = 0;
while(c.moveToNext())
values[i]= c.getString(c.getColumnIndex("Name"));
i++;
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getBaseContext(),
android.R.layout.activity_list_item, android.R.id.text1,values);
lv1.setAdapter(adapter);
【讨论】:
以上是关于如何在 ListView 中显示 SQLite 查询的输出的主要内容,如果未能解决你的问题,请参考以下文章
如何从sqlite数据库中获取数据并显示在listview中
ListView 未根据 sqlite 中的名称显示可绘制对象中的正确图像
android开发中的SQLite数据库的增删改查功能怎么实现?
在android中的sqlite数据库中的listview中显示数据[关闭]