【发布时间】:2017-08-18 06:51:04
【问题描述】:
我正在尝试使用“Android 编程:大书呆子牧场指南”自学 android 开发,其中一个练习(如果您熟悉这本书,则从第 14 章开始)涉及创建一个工具栏,其中包含一个添加新项目的项目单击该项目时进入数据库的条目。一个挑战问题是删除条目,但我想从条目中删除条目。抱歉,如果我没有很好地解释这一点。
第一次打开应用程序时,基本上是一个空的显示屏,右上角有一个带有两个项目的工具栏。 Here is a screenshot if it helps。这两个项目添加或计算条目数,然后将其显示在列表中。在上图中,有一个条目。当您单击 + 符号时,会添加一个新条目,它会将您带到 layout 以获取允许您添加所有详细信息的条目。我想添加一个删除按钮,允许您在查看详细信息时删除条目。
这是我试过但没有用的代码: 在 CrimeLab.java 中
public void addCrime(Crime c){
ContentValues values = getContentValues(c);
mDatabase.insert(CrimeTable.NAME, null, values);
}
public void deleteCrime(Crime crimeId){
String uuidString = crimeId.toString();
mDatabase.delete(CrimeTable.NAME, null, new String[]
{uuidString});
}
我基本上试图撤消我在创建数据库条目时所做的事情。 在 CrimeListFragment.java 中:
@Override
public boolean onOptionsItemSelected(MenuItem item){
switch (item.getItemId()){
case R.id.menu_item_new_crime:
Crime crime = new Crime();
CrimeLab.get(getActivity()).addCrime(crime);
Intent intent =
CrimePagerActivity.newIntent(getActivity(), crime.getId());
startActivity(intent);
return true;
case R.id.menu_item_show_subtitle:
mSubtitleVisible = !mSubtitleVisible;
getActivity().invalidateOptionsMenu();
updateSubtitle();
return true;
case R.id.delete_button:
Crime mCrime = new Crime();
CrimeLab.get(getActivity()).deleteCrime(mCrime);
default:
return super.onOptionsItemSelected(item);
}
}
我想我需要创建一个 onClick 操作,但是如果我试图从由条目中的项目创建的数据库中删除条目,这会去哪里?
我想添加的其他内容是通过滑动以显示删除按钮从原始页面中删除条目,就像在 Messenger 应用中一样。
对不起,如果我没有正确地提出我的问题。这对我来说是一个全新的世界,与这本书一起阅读很有帮助,但我发现很容易认为你理解了一些东西,然后自己就完全迷失了。 另外,我查看了 stackoverflow 和其他各种论坛,并没有找到这个问题的确切答案。
根据请求,这里是 Crime.java 的代码:
public class Crime {
private String mTitle;
private Date mDate;
private boolean mSolved;
private String mSuspect;
public Date getDate() {
return mDate;
}
private UUID mId;
public void setDate(Date date) {
mDate = date;
}
public void setSolved(boolean solved) {
mSolved = solved;
}
public String getSuspect(){
return mSuspect;
}
public void setSuspect (String suspect){
mSuspect = suspect;
}
public String getPhotoFilename(){
return "IMG_" + getId().toString() + ".jpg";
}
public boolean isSolved() {
return mSolved;
}
public Crime(){
//generate unique identifier
this(UUID.randomUUID());
}
public Crime(UUID id){
mId = id;
mDate = new Date();
}
public UUID getId() {
return mId;
}
public String getTitle() {
return mTitle;
}
public void setTitle(String title) {
mTitle = title;
}
}
这是控制我的数据库条目的 .java 类:
public class CrimeBaseHelper extends SQLiteOpenHelper{
private static final int VERSION = 1;
private static final String DATABASE_NAME = "crimeBase.db";
public CrimeBaseHelper(Context context){
super(context, DATABASE_NAME, null, VERSION);
}
@Override
public void onCreate(SQLiteDatabase db){
db.execSQL("create table " + CrimeTable.NAME + "(" +
" _id integer primary key autoincrement, " +
CrimeTable.Cols.UUID + ", " +
CrimeTable.Cols.TITLE + ", " +
CrimeTable.Cols.DATE + ", " +
CrimeTable.Cols.SOLVED + ", " +
CrimeTable.Cols.SUSPECT +
")"
);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
}
}
这是我搞砸 .onClickListener 的地方
mDeleteButton = (Button)v.findViewById(R.id.delete_button);
mDeleteButton.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
Crime mCrime = new crime();
mCrime.getId()
CrimeLab.get(getActivity()).deleteCrime(mCrime);
}
}
);
【问题讨论】:
标签: java android android-sqlite