Android main 和 AsyncTask #2 发生致命异常错误
Android Error Fatal Exception at main and AsyncTask #2
我不知道为什么 logcat 会出现此错误。一旦我 运行 我的应用程序,它就会中途崩溃。
这是我的 AsyncTask 代码:
OnClickListener addMovieButtonClicked = new OnClickListener(){
@Override
public void onClick(View v){
if(mvidEditText.getText().length()!= 0){
AsyncTask<Object, Object, Object>addMovieTask =
new AsyncTask<Object, Object, Object>(){
@Override
protected Object doInBackground(Object... params){
addMovie();
return null;
}
@Override
protected void onPostExecute(Object result){
finish();
Toast.makeText(AddMovie.this, "Success", Toast.LENGTH_LONG).show();
}
};
addMovieTask.execute((Object[]) null);
}else {
AlertDialog.Builder builder = new AlertDialog.Builder(AddMovie.this);
builder.setTitle(R.string.errorTitle);
builder.setMessage(R.string.errorMessage);
builder.setPositiveButton(R.string.errorButton, null);
builder.show();
}
}
};
这是 logcat 处的错误消息:
更新了 addMovie() 代码:
private void addMovie(){
DatabaseHandler databaseHandler = new DatabaseHandler(this);
if(getIntent().getExtras()== null){
databaseHandler.insertRow(
mvidEditText.getText().toString(),
mvtitleEditText.getText().toString(),
mvtypeEditText.getText().toString(),
mvstoryEditText.getText().toString(),
mvratingEditText.getText().toString(),
mvlanguageEditText.getText().toString(),
Integer.parseInt(mvruntimeEditText.getText().toString()));
}else {
databaseHandler.updateRow(rowID,
mvidEditText.getText().toString(),
mvtitleEditText.getText().toString(),
mvtypeEditText.getText().toString(),
mvstoryEditText.getText().toString(),
mvratingEditText.getText().toString(),
mvlanguageEditText.getText().toString(),
Integer.parseInt(mvruntimeEditText.getText().toString()));
}
}
这是 insertRow() 的数据库处理程序代码:
public long insertRow(String mvkey, String mvtitle, String mvtype,
String mvstory, String mvrating, String mvlanguage, int mvruntime){
ContentValues initialValues = new ContentValues();
initialValues.put(KEY_KEY, mvkey);
initialValues.put(KEY_TITLE, mvtitle);
initialValues.put(KEY_TYPE, mvtype);
initialValues.put(KEY_STORY, mvstory);
initialValues.put(KEY_RATING, mvrating);
initialValues.put(KEY_LANGUAGE, mvlanguage);
initialValues.put(KEY_RUNTIME, mvruntime);
return db.insert(DATABASE_TABLE, null, initialValues);
}
对于屏幕截图,我很抱歉,但这是显示错误的唯一方式。我是 Android 应用程序开发的初学者。谢谢。
我不小心更改了 insertRow() 中的公共无效函数。所以我所做的是更改了下面的代码
public long insertRow(String mvkey, String mvtitle, String mvtype,
String mvstory, String mvrating, String mvlanguage, int mvruntime){
ContentValues initialValues = new ContentValues();
initialValues.put(KEY_KEY, mvkey);
initialValues.put(KEY_TITLE, mvtitle);
initialValues.put(KEY_TYPE, mvtype);
initialValues.put(KEY_STORY, mvstory);
initialValues.put(KEY_RATING, mvrating);
initialValues.put(KEY_LANGUAGE, mvlanguage);
initialValues.put(KEY_RUNTIME, mvruntime);
return db.insert(DATABASE_TABLE, null, initialValues);
}
这是我更新后的工作代码:
public void insertRow(String mvkey, String mvtitle, String mvtype,
String mvstory, String mvrating, String mvlanguage, int mvruntime){
ContentValues initialValues = new ContentValues();
initialValues.put(KEY_KEY, mvkey);
initialValues.put(KEY_TITLE, mvtitle);
initialValues.put(KEY_TYPE, mvtype);
initialValues.put(KEY_STORY, mvstory);
initialValues.put(KEY_RATING, mvrating);
initialValues.put(KEY_LANGUAGE, mvlanguage);
initialValues.put(KEY_RUNTIME, mvruntime);
open();
db.insert(DATABASE_TABLE, null, initialValues);
close();
}
我不知道为什么 logcat 会出现此错误。一旦我 运行 我的应用程序,它就会中途崩溃。
这是我的 AsyncTask 代码:
OnClickListener addMovieButtonClicked = new OnClickListener(){
@Override
public void onClick(View v){
if(mvidEditText.getText().length()!= 0){
AsyncTask<Object, Object, Object>addMovieTask =
new AsyncTask<Object, Object, Object>(){
@Override
protected Object doInBackground(Object... params){
addMovie();
return null;
}
@Override
protected void onPostExecute(Object result){
finish();
Toast.makeText(AddMovie.this, "Success", Toast.LENGTH_LONG).show();
}
};
addMovieTask.execute((Object[]) null);
}else {
AlertDialog.Builder builder = new AlertDialog.Builder(AddMovie.this);
builder.setTitle(R.string.errorTitle);
builder.setMessage(R.string.errorMessage);
builder.setPositiveButton(R.string.errorButton, null);
builder.show();
}
}
};
这是 logcat 处的错误消息:
更新了 addMovie() 代码:
private void addMovie(){
DatabaseHandler databaseHandler = new DatabaseHandler(this);
if(getIntent().getExtras()== null){
databaseHandler.insertRow(
mvidEditText.getText().toString(),
mvtitleEditText.getText().toString(),
mvtypeEditText.getText().toString(),
mvstoryEditText.getText().toString(),
mvratingEditText.getText().toString(),
mvlanguageEditText.getText().toString(),
Integer.parseInt(mvruntimeEditText.getText().toString()));
}else {
databaseHandler.updateRow(rowID,
mvidEditText.getText().toString(),
mvtitleEditText.getText().toString(),
mvtypeEditText.getText().toString(),
mvstoryEditText.getText().toString(),
mvratingEditText.getText().toString(),
mvlanguageEditText.getText().toString(),
Integer.parseInt(mvruntimeEditText.getText().toString()));
}
}
这是 insertRow() 的数据库处理程序代码:
public long insertRow(String mvkey, String mvtitle, String mvtype,
String mvstory, String mvrating, String mvlanguage, int mvruntime){
ContentValues initialValues = new ContentValues();
initialValues.put(KEY_KEY, mvkey);
initialValues.put(KEY_TITLE, mvtitle);
initialValues.put(KEY_TYPE, mvtype);
initialValues.put(KEY_STORY, mvstory);
initialValues.put(KEY_RATING, mvrating);
initialValues.put(KEY_LANGUAGE, mvlanguage);
initialValues.put(KEY_RUNTIME, mvruntime);
return db.insert(DATABASE_TABLE, null, initialValues);
}
对于屏幕截图,我很抱歉,但这是显示错误的唯一方式。我是 Android 应用程序开发的初学者。谢谢。
我不小心更改了 insertRow() 中的公共无效函数。所以我所做的是更改了下面的代码
public long insertRow(String mvkey, String mvtitle, String mvtype,
String mvstory, String mvrating, String mvlanguage, int mvruntime){
ContentValues initialValues = new ContentValues();
initialValues.put(KEY_KEY, mvkey);
initialValues.put(KEY_TITLE, mvtitle);
initialValues.put(KEY_TYPE, mvtype);
initialValues.put(KEY_STORY, mvstory);
initialValues.put(KEY_RATING, mvrating);
initialValues.put(KEY_LANGUAGE, mvlanguage);
initialValues.put(KEY_RUNTIME, mvruntime);
return db.insert(DATABASE_TABLE, null, initialValues);
}
这是我更新后的工作代码:
public void insertRow(String mvkey, String mvtitle, String mvtype,
String mvstory, String mvrating, String mvlanguage, int mvruntime){
ContentValues initialValues = new ContentValues();
initialValues.put(KEY_KEY, mvkey);
initialValues.put(KEY_TITLE, mvtitle);
initialValues.put(KEY_TYPE, mvtype);
initialValues.put(KEY_STORY, mvstory);
initialValues.put(KEY_RATING, mvrating);
initialValues.put(KEY_LANGUAGE, mvlanguage);
initialValues.put(KEY_RUNTIME, mvruntime);
open();
db.insert(DATABASE_TABLE, null, initialValues);
close();
}