DataBaseHandler类中的My Update方法
public void updateProject(Project project){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(PROJECT_NAME, project.getName()); // Contact Name
values.put(PROJECT_DESCRIPTION, project.getDescription()); // Contact Phone
values.put(CLIENT_NAME, project.getClient_name());
values.put(LOCATION, project.getLocation());
String where = PROJECT_ID + " = ? ";
String [] value = { String.valueOf(project.getProject_id()) };
try{
int count = db.update(TABLE_PROJECT, values, where , value);
Log.d(LOG_TAG, "Updated rows -> " + count);
}catch (Exception e) {
e.printStackTrace();
}
db.close();
}
}
java bean类
public class Project implements Serializable{
private static final long serialVersionUID = 1L;
private int project_id;
private String name;
private String description;
private String client_name;
private String location;
public Project(){
}
public Project(int project_id, String name, String client_name,String description, String location){
this.project_id = project_id;
this.name = name;
this.description = description;
this.client_name = client_name;
this.location = location;
}
public int getProject_id() {
return project_id;
}
public void setProject_id(int project_id) {
this.project_id = project_id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getClient_name() {
return client_name;
}
public void setClient_name(String client_name) {
this.client_name = client_name;
}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
}
从列表视图添加和更新项目项的活动
public class AddProjectActivity extends Activity implements Serializable{
private static final long serialVersionUID = 1L;
private MenuItem saveItem;
private DatabaseHandler dbHelper;
private static final String TITLE = "Add Project";
public boolean isEdit = false;
private static final String LOG_TAG = "debugger";
private Project editedProject;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.add_project);
setTitle(TITLE);
dbHelper = DatabaseHandler.getInstance(this);
//get intent from Project Fragment when project is edited
Intent intent = getIntent();
if(intent.hasExtra(IntentConstants.PROJECT_ITEM)){
Project project = (Project) intent.getSerializableExtra(IntentConstants.PROJECT_ITEM);
if(project != null){
this.isEdit = true;
setEditedProject(project);
setProjectData(project);
}
}
}
private void setProjectData(Project project){
EditText projectName = (EditText) findViewById(R.id.editTextProjectName);
projectName.setText(project.getName());
EditText clientName = (EditText) findViewById(R.id.editTextProjectClient);
clientName.setText(project.getClient_name());
EditText projectDesc = (EditText) findViewById(R.id.editTextProjectDesc);
projectDesc.setText(project.getDescription());
EditText projectLocation = (EditText) findViewById(R.id.editTextProjectLocation);
projectLocation.setText(project.getLocation());
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.saveButton:
if(isEdit == true){
updateProject();
}else{
saveProject();
}
finish();
break;
case R.id.cancelButton:
finish();
break;
default:
break;
}
return true;
}
private void updateProject(){
dbHelper.updateProject(getProjectData(getEditedProject()));
}
public boolean isEdit() {
return isEdit;
}
public void setEdit(boolean isEdit) {
this.isEdit = isEdit;
}
private Project getProjectData(Project newProject){
EditText projectName = (EditText) findViewById(R.id.editTextProjectName);
String project = projectName.getText().toString();
EditText clientName = (EditText) findViewById(R.id.editTextProjectClient);
String client = clientName.getText().toString();
EditText projectDesc = (EditText) findViewById(R.id.editTextProjectDesc);
String description = projectDesc.getText().toString();
EditText projectLocation = (EditText) findViewById(R.id.editTextProjectLocation);
String location = projectLocation.getText().toString();
newProject.setName(project);
newProject.setClient_name(client);
newProject.setDescription(description);
newProject.setLocation(location);
return newProject;
}
public Project getEditedProject() {
return editedProject;
}
public void setEditedProject(Project editedProject) {
this.editedProject = editedProject;
}
}
我的ListFragment
方法处理listview项目的点击。它使用AddProjectActivity
Intent
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
if(dbHelper != null){
Project project = (Project) this.getListAdapter().getItem(position);
Intent intent = new Intent(getActivity(), AddProjectActivity.class);
intent.putExtra(IntentConstants.PROJECT_ITEM, project);
startActivity(intent);
this.isEdit = true;
}
}
我遇到的问题是当listview项目被用户编辑和更新时,它永远不会在数据库中更新。 update方法返回的rowcount始终为零。
我无法解决此问题。
有人可以帮忙吗。
答案 0 :(得分:1)
我发现了这个问题。我没有在ListView中设置Project对象的id。所以id永远不会匹配,也没有更新。