实施 SimpleCursorAdapter 时出错
Error in Implementing SimpleCursorAdapter
我的代码如下所示。
Load.java
public class Load extends AppCompatActivity {
ListView list;
MydbHelper db;
SimpleCursorAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_load);
db= new MydbHelper(getApplicationContext());
list = findViewById(R.id.lv1);
String[] arrayCols = new String[]{"_id","NAME","PHONE"};
int[] arrayIDs = new int[]{0,R.id.tv1,R.id.tv2};
Cursor data = db.getdata();
if (data.getCount()==0){
Toast.makeText(this, "No data to print in the list", Toast.LENGTH_SHORT).show();
}
else{
do{
//adapter = new NewAdapter(getApplicationContext(),R.layout.mylist,data,0);
adapter= new SimpleCursorAdapter(this, R.layout.mylist,data,arrayCols,arrayIDs,0);
list.setAdapter(adapter);
Toast.makeText(this,"list is running",Toast.LENGTH_LONG).show();
}while (data.moveToNext());
}
}
}
Class MydbHelper.java
public class MydbHelper extends SQLiteOpenHelper {
Context mycontext;
public MydbHelper(Context context) {
super(context, "MyDB", null, 1);
this.mycontext=context;
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL("CREATE TABLE BHASKAR(_id INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT, PHONE INT);");
sqLiteDatabase.execSQL("INSERT INTO BHASKAR VALUES(1,'RAHUL',9127543008)");
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
public Cursor getdata(){
SQLiteDatabase database = getReadableDatabase();
Cursor data = database.rawQuery("SELECT * FROM BHASKAR",null);
return data;
}
}
遇到错误如下:
错误 Logcat:Screenshot of Logcat
Caused by: java.lang.IllegalArgumentException: column '_id' does not
exist
at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:303)
at android.widget.CursorAdapter.init(CursorAdapter.java:172)
at android.widget.CursorAdapter.(CursorAdapter.java:149)
at android.widget.ResourceCursorAdapter.(ResourceCursorAdapter.java:91)
at android.widget.SimpleCursorAdapter.(SimpleCursorAdapter.java:104)
请帮帮我。
在 in.complit.csync.Load.onCreate(Load.java:31)
无需使用 do{...}whie(...)
遍历数据游标。只需按如下方式更改您的代码
list = findViewById(R.id.lv1);
String[] arrayCols = new String[]{"NAME","PHONE"};
int[] arrayIDs = new int[]{R.id.tv1,R.id.tv2};
Cursor data = db.getdata();
if (data.getCount()==0) {
Toast.makeText(this, "No data to print in the list", Toast.LENGTH_SHORT).show();
}
else{
adapter= new SimpleCursorAdapter(this, R.layout.mylist,data,arrayCols,arrayIDs,0);
list.setAdapter(adapter);
Toast.makeText(this,"list is running",Toast.LENGTH_LONG).show();
}
注:
记得在创建时在左括号'('
和_id
之间添加一个space。您可能需要卸载并安装该应用程序,以便正确进行更改。
由于您没有提到您遇到的错误到底是什么,我可能会建议您可以在代码中进行哪些更改。
list = findViewById(R.id.lv1);
String[] arrayCols = new String[]{"NAME", "PHONE"};
int[] arrayIDs = new int[]{R.id.tv1, R.id.tv2};
Cursor data = db.getdata();
if (data.getCount() == 0) {
Toast.makeText(this, "No data to print in the list", Toast.LENGTH_SHORT).show();
} else {
// Move the cursor to first position
data.moveToFirst();
// Initialize the adapter here.
adapter = new SimpleCursorAdapter(this, R.layout.mylist, data, arrayCols, arrayIDs, 0);
list.setAdapter(adapter);
}
然后在 SimpleCursorAdapter
中循环遍历 data
。
//MyHelper.java
public class MyHelper extends SQLiteOpenHelper {
public MyHelper(Context context) {
super(context,"student",null,1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table stud(rollno int primary key,name TEXT,phone long);");
db.execSQL("insert into stud values(1,'bca',9988998899);");
db.execSQL("insert into stud values(2,'mca',9988998897);");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
//MainActivity.java
public class MainActivity extends AppCompatActivity {
MyHelper mh;
SQLiteDatabase db;
Cursor rs;
ListView lv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyHelper mh = new MyHelper(getApplicationContext());
db = mh.getReadableDatabase();
lv = (ListView) findViewById(R.id.mylist);
rs = db.rawQuery("select rollno _id,name,phone from stud",null);
SimpleCursorAdapter sca = new SimpleCursorAdapter(getApplicationContext(),
R.layout.detail_adapter,rs,new String[]{"_id","name","phone"},
new int[]{R.id.textid,R.id.textname,R.id.textphone},0);
lv.setAdapter(sca);
}
}
//activity_main.xml
<ListView
android:id="@+id/mylist"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true" />
//detail_adapter.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:text="TextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/textid" />
<TextView
android:text="TextView"
android:layout_marginLeft="25dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/textname" />
<TextView
android:text="TextView"
android:layout_marginLeft="25dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/textphone" />
</LinearLayout>
我的代码如下所示。 Load.java
public class Load extends AppCompatActivity {
ListView list;
MydbHelper db;
SimpleCursorAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_load);
db= new MydbHelper(getApplicationContext());
list = findViewById(R.id.lv1);
String[] arrayCols = new String[]{"_id","NAME","PHONE"};
int[] arrayIDs = new int[]{0,R.id.tv1,R.id.tv2};
Cursor data = db.getdata();
if (data.getCount()==0){
Toast.makeText(this, "No data to print in the list", Toast.LENGTH_SHORT).show();
}
else{
do{
//adapter = new NewAdapter(getApplicationContext(),R.layout.mylist,data,0);
adapter= new SimpleCursorAdapter(this, R.layout.mylist,data,arrayCols,arrayIDs,0);
list.setAdapter(adapter);
Toast.makeText(this,"list is running",Toast.LENGTH_LONG).show();
}while (data.moveToNext());
}
}
}
Class MydbHelper.java
public class MydbHelper extends SQLiteOpenHelper {
Context mycontext;
public MydbHelper(Context context) {
super(context, "MyDB", null, 1);
this.mycontext=context;
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL("CREATE TABLE BHASKAR(_id INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT, PHONE INT);");
sqLiteDatabase.execSQL("INSERT INTO BHASKAR VALUES(1,'RAHUL',9127543008)");
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
public Cursor getdata(){
SQLiteDatabase database = getReadableDatabase();
Cursor data = database.rawQuery("SELECT * FROM BHASKAR",null);
return data;
}
} 遇到错误如下:
错误 Logcat:Screenshot of Logcat
Caused by: java.lang.IllegalArgumentException: column '_id' does not exist at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:303) at android.widget.CursorAdapter.init(CursorAdapter.java:172) at android.widget.CursorAdapter.(CursorAdapter.java:149) at android.widget.ResourceCursorAdapter.(ResourceCursorAdapter.java:91) at android.widget.SimpleCursorAdapter.(SimpleCursorAdapter.java:104)
请帮帮我。 在 in.complit.csync.Load.onCreate(Load.java:31)
无需使用 do{...}whie(...)
遍历数据游标。只需按如下方式更改您的代码
list = findViewById(R.id.lv1);
String[] arrayCols = new String[]{"NAME","PHONE"};
int[] arrayIDs = new int[]{R.id.tv1,R.id.tv2};
Cursor data = db.getdata();
if (data.getCount()==0) {
Toast.makeText(this, "No data to print in the list", Toast.LENGTH_SHORT).show();
}
else{
adapter= new SimpleCursorAdapter(this, R.layout.mylist,data,arrayCols,arrayIDs,0);
list.setAdapter(adapter);
Toast.makeText(this,"list is running",Toast.LENGTH_LONG).show();
}
注:
记得在创建时在左括号'('
和_id
之间添加一个space。您可能需要卸载并安装该应用程序,以便正确进行更改。
由于您没有提到您遇到的错误到底是什么,我可能会建议您可以在代码中进行哪些更改。
list = findViewById(R.id.lv1);
String[] arrayCols = new String[]{"NAME", "PHONE"};
int[] arrayIDs = new int[]{R.id.tv1, R.id.tv2};
Cursor data = db.getdata();
if (data.getCount() == 0) {
Toast.makeText(this, "No data to print in the list", Toast.LENGTH_SHORT).show();
} else {
// Move the cursor to first position
data.moveToFirst();
// Initialize the adapter here.
adapter = new SimpleCursorAdapter(this, R.layout.mylist, data, arrayCols, arrayIDs, 0);
list.setAdapter(adapter);
}
然后在 SimpleCursorAdapter
中循环遍历 data
。
//MyHelper.java
public class MyHelper extends SQLiteOpenHelper {
public MyHelper(Context context) {
super(context,"student",null,1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table stud(rollno int primary key,name TEXT,phone long);");
db.execSQL("insert into stud values(1,'bca',9988998899);");
db.execSQL("insert into stud values(2,'mca',9988998897);");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
//MainActivity.java
public class MainActivity extends AppCompatActivity {
MyHelper mh;
SQLiteDatabase db;
Cursor rs;
ListView lv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyHelper mh = new MyHelper(getApplicationContext());
db = mh.getReadableDatabase();
lv = (ListView) findViewById(R.id.mylist);
rs = db.rawQuery("select rollno _id,name,phone from stud",null);
SimpleCursorAdapter sca = new SimpleCursorAdapter(getApplicationContext(),
R.layout.detail_adapter,rs,new String[]{"_id","name","phone"},
new int[]{R.id.textid,R.id.textname,R.id.textphone},0);
lv.setAdapter(sca);
}
}
//activity_main.xml
<ListView
android:id="@+id/mylist"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true" />
//detail_adapter.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:text="TextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/textid" />
<TextView
android:text="TextView"
android:layout_marginLeft="25dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/textname" />
<TextView
android:text="TextView"
android:layout_marginLeft="25dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/textphone" />
</LinearLayout>