Java Android Studio-ClassCastException错误?
Java Android Studio-ClassCastException错误?,java,android,android-studio,android-sqlite,serializable,Java,Android,Android Studio,Android Sqlite,Serializable,我想很快提到这是一个家庭作业,但我只是在寻找方向。我的教授以前没有应用过SQLite,所以他不确定该怎么做。该类正在执行SharedReference(我无法获取),但这是用于存储待办事项列表数据的另一个选项 现在,当我点击按钮“添加”AddDo类下的任务时,它抛出以下错误: 编辑:这是实际按钮的类。这是我的主要任务列表所在的位置,因为XML已经准备好接收数据,并且有一个用于添加新任务的按钮 protected void onCreate(Bundle savedInstanceState) {
我想很快提到这是一个家庭作业,但我只是在寻找方向。我的教授以前没有应用过SQLite,所以他不确定该怎么做。该类正在执行SharedReference(我无法获取),但这是用于存储待办事项列表数据的另一个选项 现在,当我点击按钮“添加”AddDo类下的任务时,它抛出以下错误: 编辑:这是实际按钮的类。这是我的主要任务列表所在的位置,因为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));
}
});
这是我的类,用于添加任务(这处于早期阶段):
这是我的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();
}
}
}
导入android.content.ContentValues;
导入android.content.Context;
导入android.database.Cursor;
导入android.database.SQLException;
导入android.database.sqlite.SQLiteDatabase;
导入android.database.sqlite.SQLiteOpenHelper;
导入android.util.Log;
导入net.example.name.dotoday.AddDo;
导入java.util.ArrayList;
导入java.util.List;
公共类DBHelper扩展了SQLiteOpenHelper{
私有静态最终字符串TAG=“DbHelper”;
//数据库信息
私有静态最终字符串TheDB=“TheDB”;
私有静态最终int数据库_VERSION=1;
//数据库表名
私有静态最终字符串表\u ParentTask=“ParentTask”;
私有静态最终字符串表_SubTask=“SubTask”;
//ParentTask表列
私有静态最终字符串parentIDColumn=“\u parentID”;
私有静态最终字符串taskTitleColumn=“\u taskTitle”;
私有静态最终字符串statusColumn=“\u status”;
私有静态最终字符串dueDateColumn=“\u dueDate”;
私有静态最终字符串completedColumn=“\u completedTask”//完成为100%时
私有静态最终字符串calculatedProgressColumn=“\u calculatedProgress”//转换时的长值。
//子任务表列
私有静态最终字符串foreignkeyColumn=“\u foreignkey”;
私有静态最终字符串childIDColumn=“\u childID”;
私有静态最终字符串subtaskdescolumn=“_subTaskDesc”;
私有静态最终字符串subCompletedColumn=“\u subCompleted”//BOOL用于单个任务--可能未实现
/*——真正的乐趣来了,你会的!——*/
私有静态DBHelper-mDbHelper;
公共静态同步DBHelper getInstance(上下文){
//使用应用程序上下文,这将确保
//不要意外泄露活动的上下文。
如果(mDbHelper==null){
mDbHelper=new DBHelper(context.getApplicationContext());
}
返回mDbHelper;
}
/**
*构造函数应该是私有的,以防止直接实例化。
*改为调用静态方法“getInstance()”。
*/
私有DBHelper(上下文){
super(上下文,TheDB,null,数据库版本);
}
@凌驾
public void onCreate(SQLiteDatabase db){
字符串CREATE\u ParentTask\u TABLE=“CREATE TABLE”+TABLE\u ParentTask+
"(" +
parentIDColumn+“整数主键,”+
taskTitleColumn+“文本,”+
statusColumn+“BOOL,”+
dueDateColumn+“文本,”+
completedColumn+“BOOL,”+
calculatedProgressColumn+“REAL”+
")";
//创建物理表
execSQL(创建父任务表);
/*字符串CREATE_SubTask_TABLE=“CREATE TABLE”+TABLE_SubTask+
"(" +
childID+“整数主键,”+
外键+“INT,”+
subTaskDesc+“文本,”+
子完成+“BOOL”+
")";
//创建物理表
execSQL(创建子任务表)*/
}
@凌驾
public void onUpgrade(SQLiteDatabase db,int-oldVersion,int-newVersion){
如果(旧版本!=新版本){
//最简单的实现是删除所有旧表并重新创建它们
db.execSQL(“如果存在删除表”+表\u ParentTask);
db.execSQL(“如果存在删除表”+表_子任务);
onCreate(db);
}
}
public void insertTaskDetails(AddDo userData){
SQLiteDatabase db=getWritableDatabase();
db.beginTransaction();
试一试{
ContentValues=新的ContentValues();
value.put(parentIDColumn,userData.doParentID);
value.put(tasktilecolumn,userData.doTaskTitle);
value.put(statusColumn,userData.doStatus);
value.put(dueDateColumn,userData.doDueDate);
value.put(completedColumn、userData.doccompletedtask);
value.put(calculatedProgressColumn,userData.doCalculatedProgress);
db.insertOrThrow(表_ParentTask,null,值);
db.setTransactionSuccessful();
}捕获(SQLE异常){
e、 printStackTrace();
Log.d(标记“尝试将post添加到数据库时出错”);
}最后{
db.endTransaction();
}
}
/*
从UserTable获取所有数据
*/
公共列表getAllMainTasks(){
List usersdetail=new ArrayList();
字符串USER\u DETAIL\u SELECT\u QUERY=“SELECT*FROM”+表\u ParentTask;
SQLiteDatabase db=getReadableDatabase();
Cursor Cursor=db.rawQuery(用户详细信息选择查询,空);
试一试{
if(cursor.moveToFirst()){
做{
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.getColu
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 = "";
}
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();
}
}
}
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
Android is unable to create an object of Activity ,
the reason is related with AddDo class
android can't convert AddDo class to Activity because AddDo is not a child of
Activity but android need an activity parent-child relationship
between AddDo and Activity
class Addo extends AppCompactActivity
class Data implements Serializable
{
public String doParentID, doTaskTitle, doStatus, doDueDate, doCompletedTask, doCalculatedProgress = "";
public Data (){} // suitable default and parameterized constructor
.. fields and getter and setters
}
public class AddDo extends Activity implements Serializable {