gpt4 book ai didi

java - Android Studio-ClassCastException 错误?

转载 作者:行者123 更新时间:2023-12-02 03:16:48 28 4
gpt4 key购买 nike


我想快速提及这是一项家庭作业,但我只是在寻找方向。我的教授以前没有应用过 SQLite,所以他不确定该怎么做。该类正在执行 SharedPreference (我无法获取),但这是用于存储待办事项列表数据的另一个选项。

现在,当我点击 AddDo 类下的按钮“添加”任务时,它会抛出以下错误:

              java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{net.example.name.dotoday/net.name.example.dotoday.AddDo}: java.lang.ClassCastException: net.example.name.dotoday.AddDo cannot be cast to android.app.Activity

编辑:这是实际按钮的类。这是我的主要任务列表所在的位置,因为 XML 已准备好数据,并且有一个用于添加新任务的按钮。

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);


Button addMainTask = (Button) findViewById(R.id.addMainTask);

addMainTask.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View view) {
//This is being flagged as of now because the class type IS not Activity, but serializable.
startActivity(new Intent(main.this, AddDo.class));

}
});

这是我的类(class),用于添加任务(处于早期阶段):

    package net.example.name.dotoday;

import java.io.Serializable;

public class AddDo implements Serializable {

//This is what will be transferred to the actual DB when I make a task.
public String doParentID, doTaskTitle, doStatus, doDueDate, doCompletedTask, doCalculatedProgress = "";

}

这是我的 DBHandler:

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 android.util.Log;

import net.example.name.dotoday.AddDo;

import java.util.ArrayList;
import java.util.List;

public class DBHelper extends SQLiteOpenHelper {

private static final String TAG = "DbHelper";

// Database Info
private static final String TheDB = "TheDB";
private static final int DATABASE_VERSION = 1;

//DB Table Names
private static final String TABLE_ParentTask = "ParentTask";
private static final String TABLE_SubTask = "SubTask";


//ParentTask Table Columns
private static final String parentIDColumn = "_parentID";
private static final String taskTitleColumn = "_taskTitle";
private static final String statusColumn = "_status";
private static final String dueDateColumn = "_dueDate";
private static final String completedColumn = "_completedTask"; //When completion is 100%
private static final String calculatedProgressColumn = "_calculatedProgress"; //LONG VALUE WHEN CONVERTED.

//SubTask Table Columns
private static final String foreignkeyColumn = "_foreignkey";
private static final String childIDColumn = "_childID";
private static final String subTaskDescColumn = "_subTaskDesc";
private static final String subCompletedColumn = "_subCompleted"; // BOOL for individual tasks -- may not be implemented


/* -- Here comes the real fun, ya'll! -- */

private static DBHelper mDbHelper;


public static synchronized DBHelper getInstance(Context context) {
// Use the application context, which will ensure that you
// don't accidentally leak an Activity's context.

if (mDbHelper == null) {
mDbHelper = new DBHelper(context.getApplicationContext());
}
return mDbHelper;
}


/**
* Constructor should be private to prevent direct instantiation.
* Make a call to the static method "getInstance()" instead.
*/
private DBHelper(Context context) {
super(context, TheDB, null, DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_ParentTask_TABLE = "CREATE TABLE " + TABLE_ParentTask +
"(" +
parentIDColumn + " INTEGER PRIMARY KEY ," +
taskTitleColumn + " TEXT," +
statusColumn + " BOOL," +
dueDateColumn+ " TEXT," +
completedColumn + " BOOL," +
calculatedProgressColumn + " REAL" +
")";

//CREATE THE PHYSICAL TABLE
db.execSQL(CREATE_ParentTask_TABLE);

/*String CREATE_SubTask_TABLE = "CREATE TABLE " + TABLE_SubTask +
"(" +
childID + " INTEGER PRIMARY KEY ," +
foreignkey + " INT," +
subTaskDesc + " TEXT," +
subCompleted + " BOOL" +
")";

//CREATE THE PHYSICAL TABLE
db.execSQL(CREATE_SubTask_TABLE);*/
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (oldVersion != newVersion) {
// Simplest implementation is to drop all old tables and recreate them
db.execSQL("DROP TABLE IF EXISTS " + TABLE_ParentTask);
db.execSQL("DROP TABLE IF EXISTS " + TABLE_SubTask);

onCreate(db);
}
}

public void insertTaskDetails(AddDo userData) {

SQLiteDatabase db = getWritableDatabase();

db.beginTransaction();

try {
ContentValues values = new ContentValues();
values.put(parentIDColumn, userData.doParentID);
values.put(taskTitleColumn, userData.doTaskTitle);
values.put(statusColumn, userData.doStatus);
values.put(dueDateColumn, userData.doDueDate);
values.put(completedColumn, userData.doCompletedTask);
values.put(calculatedProgressColumn, userData.doCalculatedProgress);

db.insertOrThrow(TABLE_ParentTask, null, values);
db.setTransactionSuccessful();
} catch (SQLException e) {
e.printStackTrace();
Log.d(TAG, "Error while trying to add post to database");
} finally {

db.endTransaction();
}


}

/*
fetch all data from UserTable
*/

public List<AddDo> getAllMainTasks() {

List<AddDo> usersdetail = new ArrayList<>();

String USER_DETAIL_SELECT_QUERY = "SELECT * FROM " + TABLE_ParentTask;

SQLiteDatabase db = getReadableDatabase();
Cursor cursor = db.rawQuery(USER_DETAIL_SELECT_QUERY, null);

try {
if (cursor.moveToFirst()) {
do {
AddDo userData = new AddDo();
userData.doParentID = cursor.getString(cursor.getColumnIndex(parentIDColumn));
userData.doTaskTitle = cursor.getString(cursor.getColumnIndex(taskTitleColumn));
userData.doStatus = cursor.getString(cursor.getColumnIndex(statusColumn));
userData.doDueDate = cursor.getString(cursor.getColumnIndex(dueDateColumn));
userData.doCompletedTask = cursor.getString(cursor.getColumnIndex(completedColumn));
userData.doCalculatedProgress = cursor.getString(cursor.getColumnIndex(calculatedProgressColumn));

usersdetail.add(userData);

} while (cursor.moveToNext());
}
} catch (Exception e) {
Log.d(TAG, "Error while trying to get posts from database");
} finally {
if (cursor != null && !cursor.isClosed()) {
cursor.close();
}
}

return usersdetail;

}

/*
Delete single row from ParentTask
*/
void deleteRow(String name) {
SQLiteDatabase db = getWritableDatabase();


try {
db.beginTransaction();
db.execSQL("delete from " + TABLE_ParentTask + " where parentid ='" + parentIDColumn + "'");
db.setTransactionSuccessful();
} catch (SQLException e) {
Log.d(TAG, "Error while trying to delete task detail");
} finally {
db.endTransaction();
}


}
}

我想知道这是否与 AddDo 实现可序列化有关?我可以将其换成具有标准 Activity 的不同 XML,并且它会起作用。

这里的任何指示将不胜感激。我和我的教授不知道为什么这是不想表现的,而且直到现在我们都没有使用过 SQLite。

非常感谢!

最佳答案

AddDo 没有扩展 Activity 类

使用下面的代码扩展使用 Activity 或 AppCompactActivity

public class AddDo extends Activity implements Serializable {

关于java - Android Studio-ClassCastException 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40182643/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com