我看过其他问题,但没有一个答案能满足我的需要。当我点击主活动的回收器视图时,它应该把我带到学生活动,但它没有把我带到学生活动,而是给我显示了这个错误。APK也是构建的,但是在使用应用程序时,错误出现了。
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.TextView;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
FloatingActionButton fab;
RecyclerView recyclerView;
ClassAdapter classAdapter;
RecyclerView.LayoutManager layoutManager;
Toolbar toolbar;
ArrayList<ClassItem> classItems = new ArrayList<>();
DbHelper dbHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fab = findViewById(R.id.fab_main);
fab.setOnClickListener(v-> showDialog());
dbHelper = new DbHelper(this);
loadClass();
recyclerView= findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(this);
classAdapter = new ClassAdapter(classItems, this);
recyclerView.setAdapter(classAdapter);
recyclerView.setLayoutManager(layoutManager);
classAdapter.setOnItemClickListener(position -> gotoItemActivity(position));
setToolbar();
}
private void loadClass() {
Cursor cursor = dbHelper.getClassTable();
classItems.clear();
while (cursor.moveToNext()){
@SuppressLint("Range") int id = cursor.getInt(cursor.getColumnIndex(DbHelper.C_ID));
@SuppressLint("Range") String className = cursor.getString(cursor.getColumnIndex(DbHelper.CLASS_NAME_KEY));
@SuppressLint("Range") String subjectName = cursor.getString(cursor.getColumnIndex(DbHelper.SUBJECT_NAME_KEY));
classItems.add(new ClassItem(id,className,subjectName));
}
}
private void setToolbar() {
toolbar = findViewById(R.id.toolbar);
TextView title = toolbar.findViewById(R.id.title_toolbar);
TextView subtitle = toolbar.findViewById(R.id.subtitle_toolbar);
ImageButton back = toolbar.findViewById(R.id.back);
ImageButton save = toolbar.findViewById(R.id.save);
title.setText("AttendX");
subtitle.setVisibility(View.GONE);
back.setVisibility(View.INVISIBLE);
save.setVisibility(View.INVISIBLE);
}
private void gotoItemActivity(int position) {
Intent intent = new Intent(this, StudentActivity.class);
intent.putExtra("className",classItems.get(position).getClassName());
intent.putExtra("subjectName",classItems.get(position).getSubjectName());
intent.putExtra("position",position);
intent.putExtra("cid",classItems.get(position).getCid());
startActivity(intent);
}
private void showDialog() {
MyDialog dialog = new MyDialog();
dialog.show(getSupportFragmentManager(), MyDialog.CLASS_ADD_DIALOG);
dialog.setListener((className, subjectName)-> addClass(className, subjectName));
}
@SuppressLint("NotifyDataSetChanged")
private void addClass(String className, String subjectName) {
long cid = dbHelper.addClass(className,subjectName);
ClassItem classItem = new ClassItem(cid, className, subjectName);
classItems.add(classItem);
classAdapter.notifyDataSetChanged();
}
@Override
public boolean onContextItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()){
case 0:
showUpdateDialog(item.getGroupId());
break;
case 1:
deleteClass(item.getGroupId());
}
return super.onContextItemSelected(item);
}
private void showUpdateDialog(int position) {
MyDialog dialog = new MyDialog();
dialog.show(getSupportFragmentManager(), MyDialog.UPDATE_CLASS_DIALOG);
dialog.setListener((className,subjectName)->updateClass(position,className,subjectName));
}
private void updateClass(int position, String className, String subjectName) {
dbHelper.updateClass(classItems.get(position).getCid(),className,subjectName);
classItems.get(position).setClassName(className);
classItems.get(position).setSubjectName(subjectName);
classAdapter.notifyItemChanged(position);
}
private void deleteClass(int position) {
dbHelper.deleteClass(classItems.get(position).getCid());
classItems.remove(position);
classAdapter.notifyItemRemoved(position);
}
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<include
android:id="@+id/toolbarMain"
layout="@layout/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_margin="24dp"
android:id="@+id/fab_main"
android:src="@drawable/ic_baseline_add_24"
tools:ignore="ContentDescription" />
<androidx.recyclerview.widget.RecyclerView
android:layout_below="@id/toolbarMain"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/recyclerView"/>
</RelativeLayout>
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageButton;
import android.widget.TextView;
import java.util.ArrayList;
public class StudentActivity extends AppCompatActivity {
Toolbar toolbar;
private TextView subtitle;
private String className;
private String subjectName;
private int position;
private StudentAdapter adapter;
private RecyclerView recyclerView;
private ArrayList<StudentItem> studentItems = new ArrayList<>();
private RecyclerView.LayoutManager layoutManager;
private DbHelper dbHelper;
private long cid;
private MyCalendar calendar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_student);
Intent intent = getIntent();
className = intent.getStringExtra("className");
subjectName = intent.getStringExtra("subjectName");
position = intent.getIntExtra("position", -1);
cid = intent.getLongExtra("cid", -1);
calendar = new MyCalendar();
dbHelper = new DbHelper(this);
setToolbar();
loadData();
recyclerView = findViewById(R.id.student_recycler);
recyclerView.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
adapter = new StudentAdapter(studentItems, this);
recyclerView.setAdapter(adapter);
adapter.setOnItemClickListener(position->changeStatus(position));
loadStatusData();
}
private void setToolbar() {
toolbar = findViewById(R.id.toolbar);
TextView title = toolbar.findViewById(R.id.title_toolbar);
subtitle = toolbar.findViewById(R.id.subtitle_toolbar);
ImageButton back = toolbar.findViewById(R.id.back);
ImageButton save = toolbar.findViewById(R.id.save);
save.setOnClickListener(v->saveStatus());
title.setText(className);
subtitle.setText(subjectName+" | "+calendar.getDate());
back.setOnClickListener(v-> onBackPressed());
toolbar.inflateMenu(R.menu.student_menu);
toolbar.setOnMenuItemClickListener(menuItem->OnMenuItemClick(menuItem));
}
private void saveStatus() {
for(StudentItem studentItem : studentItems){
String status = studentItem.getStatus();
if (status !="P") status = "A";
long value = dbHelper.addStatus(studentItem.getSid(),cid,calendar.getDate(),status);
if (value == -1)dbHelper.updateStatus(studentItem.getSid(),calendar.getDate(),status);
}
}
@SuppressLint("NotifyDataSetChanged")
private void loadStatusData(){
for(StudentItem studentItem : studentItems){
String status = dbHelper.getStatus(studentItem.getSid(),calendar.getDate());
if (status != null) studentItem.setStatus(status);
else studentItem.setStatus("");
}
adapter.notifyDataSetChanged();
}
private void loadData() {
Cursor cursor = dbHelper.getClassTable();
Log.i("1234567890", "loadData: "+cid);
studentItems.clear();
while (cursor.moveToNext()){
@SuppressLint("Range") long sid = cursor.getInt(cursor.getColumnIndex(DbHelper.S_ID));
@SuppressLint("Range") int roll = cursor.getInt(cursor.getColumnIndex(DbHelper.STUDENT_ROLL_KEY));
@SuppressLint("Range") String name = cursor.getString(cursor.getColumnIndex(DbHelper.STUDENT_NAME_KEY));
studentItems.add(new StudentItem(sid,roll,name));
}
cursor.close();
}
private void changeStatus(int position) {
String status = studentItems.get(position).getStatus();
if (status.equals("P")) status = "A";
else status ="P";
studentItems.get(position).setStatus(status);
adapter.notifyItemChanged(position);
}
private boolean OnMenuItemClick(MenuItem menuItem) {
if (menuItem.getItemId()==R.id.add_student){
showAddStudentDialog();
}
else if (menuItem.getItemId()==R.id.show_Calendar){
showCalendar();
}
else if (menuItem.getItemId()==R.id.show_attendance_sheet){
openSheetList();
}
return true;
}
private void openSheetList() {
long[] idArray = new long[studentItems.size()];
String[] nameArray = new String[studentItems.size()];
int[] rollArray = new int[studentItems.size()];
for (int i = 0; i<idArray.length; i++)
idArray[i] = studentItems.get(i).getSid();
for (int i = 0; i<rollArray.length; i++)
rollArray[i] = studentItems.get(i).getRoll();
for (int i = 0; i<nameArray.length; i++)
nameArray[i] = studentItems.get(i).getName();
Intent intent = new Intent(this, SheetListActivity.class);
intent.putExtra("cid", cid);
intent.putExtra("idArray",idArray);
intent.putExtra("rollArray",rollArray);
intent.putExtra("nameArray",nameArray);
startActivity(intent);
}
private void showCalendar() {
MyCalendar calendar = new MyCalendar();
calendar.show(getSupportFragmentManager(), "");
calendar.setOnCalendarOkClickListener(this::onCalendarOkClicked);
}
private void onCalendarOkClicked(int year, int month, int day) {
calendar.setDate(year,month,day);
subtitle.setText(subjectName+" | "+calendar.getDate());
loadStatusData();
}
private void showAddStudentDialog() {
MyDialog dialog = new MyDialog();
dialog.show(getSupportFragmentManager(), MyDialog.STUDENT_ADD_DIALOG );
dialog.setListener((roll, name)-> addStudent(roll, name));
}
private void addStudent(String roll_string, String name) {
int roll = Integer.parseInt(roll_string);
long sid = dbHelper.addStudent(cid,roll,name);
StudentItem studentItem = new StudentItem(sid,roll,name);
studentItems.add(studentItem);
adapter.notifyDataSetChanged();
}
@Override
public boolean onContextItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()){
case 0:
showUpdateStudentDialog(item.getGroupId());
break;
case 1:
deleteStudent(item.getGroupId());
}
return super.onContextItemSelected(item);
}
private void showUpdateStudentDialog(int position) {
MyDialog dialog = new MyDialog(studentItems.get(position).getRoll(),studentItems.get(position).getName());
dialog.show(getSupportFragmentManager(), MyDialog.UPDATE_STUDENT_DIALOG);
dialog.setListener((roll_string,name)->updateStudent(position,name));
}
private void updateStudent(int position, String name) {
dbHelper.updateStudent(studentItems.get(position).getSid(),name);
studentItems.get(position).setName(name);
adapter.notifyItemChanged(position);
}
private void deleteStudent(int position) {
dbHelper.deleteStudent(studentItems.get(position).getSid());
studentItems.remove(position);
adapter.notifyItemRemoved(position);
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".StudentActivity">
<include
android:id="@+id/toolbarStudent"
layout="@layout/toolbar"/>
<androidx.recyclerview.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/student_recycler"/>
</LinearLayout>
import android.annotation.SuppressLint;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import androidx.annotation.Nullable;
class DbHelper extends SQLiteOpenHelper {
private static final int VERSION = 2;
//class table
private static final String CLASS_TABLE_NAME = "CLASS_TABLE";
public static final String C_ID = "_CID";
public static final String CLASS_NAME_KEY = "CLASS_NAME";
public static final String SUBJECT_NAME_KEY = "SUBJECT_NAME";
private static final String CREATE_CLASS_TABLE =
"CREATE TABLE " + CLASS_TABLE_NAME + "( " +
C_ID + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " +
CLASS_NAME_KEY + " TEXT NOT NULL, " +
SUBJECT_NAME_KEY + " TEXT NOT NULL, " +
"UNIQUE (" + CLASS_NAME_KEY + "," + SUBJECT_NAME_KEY + ")" +
");";
private static final String DROP_CLASS_TABLE = "DROP TABLE IF EXISTS " + CLASS_TABLE_NAME;
private static final String SELECT_CLASS_TABLE = "SELECT * FROM " + CLASS_TABLE_NAME;
//student table
private static final String STUDENT_TABLE_NAME = "STUDENT_TABLE";
public static final String S_ID = "_SID";
public static final String STUDENT_NAME_KEY = "STUDENT_NAME";
public static final String STUDENT_ROLL_KEY = "ROLL";
private static final String CREATE_STUDENT_TABLE =
"CREATE TABLE " + STUDENT_TABLE_NAME +
"( " +
S_ID + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " +
C_ID + " INTEGER NOT NULL, " +
STUDENT_NAME_KEY + " TEXT NOT NULL, " +
STUDENT_ROLL_KEY + " INTEGER, " +
" FOREIGN KEY ( " + C_ID + ") REFERENCES " + CLASS_TABLE_NAME + "(" + C_ID + ")" +
");";
private static final String DROP_STUDENT_TABLE = "DROP TABLE IF EXISTS " + STUDENT_TABLE_NAME;
private static final String SELECT_STUDENT_TABLE = "SELECT * FROM " + STUDENT_TABLE_NAME;
//STATUS TABLE
private static final String STATUS_TABLE_NAME = "STATUS_TABLE";
public static final String STATUS_ID = "_STATUS_ID";
public static final String DATE_KEY = "STATUS_DATE";
public static final String STATUS_KEY = "STATUS";
private static final String CREATE_STATUS_TABLE =
"CREATE TABLE " + STATUS_TABLE_NAME +
"(" +
STATUS_ID + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " +
S_ID + " INTEGER NOT NULL, " +
C_ID + " INTEGER NOT NULL, " +
DATE_KEY + " DATE NOT NULL, " +
STATUS_KEY + " TEXT NOT NULL, " +
" UNIQUE (" + S_ID + "," + DATE_KEY + ")," +
" FOREIGN KEY (" + S_ID + ") REFERENCES " + STUDENT_TABLE_NAME + "( " + S_ID + ")," +
" FOREIGN KEY (" + C_ID + ") REFERENCES " + CLASS_TABLE_NAME + "( " + C_ID + ")" +
");";
private static final String DROP_STATUS_TABLE = "DROP TABLE IF EXISTS " + STATUS_TABLE_NAME;
private static final String SELECT_STATUS_TABLE = "SELECT * FROM " + STATUS_TABLE_NAME;
public DbHelper(@Nullable Context context) {
super(context, "Attendance.db", null, VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_CLASS_TABLE);
db.execSQL(CREATE_STUDENT_TABLE);
db.execSQL(CREATE_STATUS_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
try {
db.execSQL(DROP_CLASS_TABLE);
db.execSQL(DROP_STUDENT_TABLE);
db.execSQL(DROP_STATUS_TABLE);
} catch (SQLException e) {
e.printStackTrace();
}
}
long addClass(String className,String subjectName){
SQLiteDatabase database = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(CLASS_NAME_KEY,className);
values.put(SUBJECT_NAME_KEY,subjectName);
return database.insert(CLASS_TABLE_NAME,null,values);
}
Cursor getClassTable(){
SQLiteDatabase database = this.getReadableDatabase();
return database.rawQuery(SELECT_CLASS_TABLE,null);
}
int deleteClass(long cid){
SQLiteDatabase database = this.getReadableDatabase();
return database.delete(CLASS_TABLE_NAME,C_ID+"=?",new String[]{String.valueOf(cid)});
}
long updateClass(long cid,String className,String subjectName){
SQLiteDatabase database = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(CLASS_NAME_KEY,className);
values.put(SUBJECT_NAME_KEY,subjectName);
return database.update(CLASS_TABLE_NAME,values,C_ID+"=?",new String[]{String.valueOf(cid)});
}
long addStudent(long cid,int roll,String name){
SQLiteDatabase database = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(C_ID,cid);
values.put(STUDENT_ROLL_KEY,roll);
values.put(STUDENT_NAME_KEY,name);
return database.insert(STUDENT_TABLE_NAME,null,values);
}
Cursor getStudentTable(long cid){
SQLiteDatabase database = this.getReadableDatabase();
return database.query(STUDENT_TABLE_NAME,null,C_ID+"=?",new String[]{String.valueOf(cid)},null,null,STUDENT_ROLL_KEY);
}
int deleteStudent(long sid){
SQLiteDatabase database = this.getReadableDatabase();
return database.delete(STUDENT_TABLE_NAME,S_ID+"=?",new String[]{String.valueOf(sid)});
}
long updateStudent(long sid,String name){
SQLiteDatabase database = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(STUDENT_NAME_KEY,name);
return database.update(STUDENT_TABLE_NAME,values,S_ID+"=?",new String[]{String.valueOf(sid)});
}
long addStatus(long sid,long cid,String date,String status){
SQLiteDatabase database = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(S_ID,sid);
values.put(C_ID,cid);
values.put(DATE_KEY,date);
values.put(STATUS_KEY,status);
return database.insert(STATUS_TABLE_NAME,null,values);
}
long updateStatus(long sid,String date,String status){
SQLiteDatabase database = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(STATUS_KEY,status);
String whereClause = DATE_KEY +"='"+date+"' AND "+S_ID+"="+sid;
return database.update(STATUS_TABLE_NAME,values,whereClause,null);
}
@SuppressLint("Range")
String getStatus(long sid, String date){
String status=null;
SQLiteDatabase database = this.getReadableDatabase();
String whereClause = DATE_KEY +"='"+date+"' AND "+S_ID+"="+sid;
Cursor cursor = database.query(STATUS_TABLE_NAME,null,whereClause,null,null,null,null);
if(cursor.moveToFirst())
status = cursor.getString(cursor.getColumnIndex(STATUS_KEY));
return status;
}
Cursor getDistinctMonths(long cid){
SQLiteDatabase database = this.getReadableDatabase();
return database.query(STATUS_TABLE_NAME,new String[]{DATE_KEY},C_ID+"="+cid,null,"substr("+DATE_KEY+",4,7)",null,null);//01.04.2020
}
}
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.manage.attendx/com.manage.attendx.StudentActivity}: java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3308)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3457)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2044)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:224)
at android.app.ActivityThread.main(ActivityThread.java:7562)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
Caused by: java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.
at android.database.CursorWindow.nativeGetLong(Native Method)
at android.database.CursorWindow.getLong(CursorWindow.java:542)
at android.database.CursorWindow.getInt(CursorWindow.java:609)
at android.database.AbstractWindowedCursor.getInt(AbstractWindowedCursor.java:71)
at com.manage.attendx.StudentActivity.loadData(StudentActivity.java:112)
at com.manage.attendx.StudentActivity.onCreate(StudentActivity.java:51)
at android.app.Activity.performCreate(Activity.java:7893)
at android.app.Activity.performCreate(Activity.java:7880)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1307)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3283)
... 11 more
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.manage.attendx">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.AttendX">
<activity
android:name=".SheetActivity"
android:exported="true" />
<activity
android:name=".SheetListActivity"
android:exported="true" />
<activity
android:name=".StudentActivity"
android:exported="true" />
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
谁能帮我解决这个问题吗?
发行
你的问题是:-
private void loadData() {
Cursor cursor = dbHelper.getClassTable();
Log.i("1234567890", "loadData: "+cid);
studentItems.clear();
while (cursor.moveToNext()){
@SuppressLint("Range") long sid = cursor.getInt(cursor.getColumnIndex(DbHelper.S_ID));
@SuppressLint("Range") int roll = cursor.getInt(cursor.getColumnIndex(DbHelper.STUDENT_ROLL_KEY));
@SuppressLint("Range") String name = cursor.getString(cursor.getColumnIndex(DbHelper.STUDENT_NAME_KEY));
studentItems.add(new StudentItem(sid,roll,name));
}
cursor.close();
}
解释
修复
您要么希望从Class表中获取适当的列(C_ID、CLASS_NAME_KEY和SUBJECT_NAME),要么将Student表用作检索用于获取光标的数据的表。
这就是问题所在,我找不到错误在哪里,因为stacktrace不指向我的项目的类,而是指向android原生的类。我尝试在代码的每个部分都放断点,但是当我单击子代码时,没有一个断点被访问。 顺便说一下,我使用ViewHolder模式来处理视图,适配器是一个CursorTreeAdapter 下面是我的代码--完整的stacktrace在最后:
我已经创建了一个非常简单的数据库android应用程序。它接受输入并显示结果。添加按钮用于添加输入,删除按钮用于删除存储在SQLite数据库中的输入。我在Android SQLite中的光标指向正确,但仍然面临错误:由:java.lang.IllegalStateException引起:无法从CursorWindow读取第0,col-1行。在从中访问数据之前,请确保光标已正确初始化。以下是游标部分
日志猫 由:java.lang.IllegalStateException引起:无法从CursorWindow读取第0行,第5行。在从中访问数据之前,请确保光标已正确初始化。在Android.database.cursorwindow.nativegetString(本机方法)在Android.database.cursorwindow.getString(cursorwindow.java:46
TextWatcher代码: LogCat错误:
问题内容: 我已经将游标初始化如下: 游标本身在同一活动中的单独方法中使用: 它给了我以下错误: 每次我重新运行应用程序时,堆栈跟踪都指向此行。那里总是会给出一个错误。 该数据库是这样的: 我在SO上阅读了几篇类似的文章,但它们并没有使我知道出了什么问题。任何输入表示赞赏。 问题答案: 游标的列索引从零开始,因此请更改: 到
我使用下面的代码来处理一个临时SQLite表: 将数据保存到临时: