数据库的ID是互换android sqlite

编程入门 行业动态 更新时间:2024-10-28 16:28:02
本文介绍了数据库的ID是互换android sqlite的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

大家好。我有这个代码,我在删除时遇到问题。例如,我的名字列表是Junko,Gemina和Fukar。如果我查看每个,他们显示相同的细节。现在,如果我删除任何一个,例如。我删除Fukar,它会被成功删除,但当我点击Gemina,出现的细节是Junko。如果我点击Junko,它说很遗憾,应用程序停止工作。如果我添加新名称,例如。 Nimrod,它会成功添加,但当我查看Nimrod,Gemina的细节将出现。如果我添加另一个名称,Vourin,Gemina的数据会出现它的ids互换,我认为错误是在删除部分。我喜欢任何评论。非常感谢。

下面是我的DBHelper.java

import android。 content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.DatabaseUtils; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import java.util.ArrayList; import java.util.HashMap; public class DBHelper extends SQLiteOpenHelper { public static final String DATABASE_NAME =contactdb.sqlite; public static final String CONTACTS_TABLE_NAME =mycontacts; public static final String CONTACTS_COLUMN_ID =id; public static final String CONTACTS_COLUMN_STUNAME =name; public static final String CONTACTS_COLUMN_STUPHONE =phone; public static final String CONTACTS_COLUMN_STUSTREET =street; public static final String CONTACTS_COLUMN_STUEMAIL =email; public static final String CONTACTS_COLUMN_STUCITY =place; private HashMap hp; public DBHelper(Context context) { super(context,DATABASE_NAME,null,3); } @Override public void onCreate(SQLiteDatabase db){ db.execSQL(create table mycontacts+ (id整数主键自动增量,名称文本,电话文本,电子邮件文本,街道文本,地方文本)); } @Override public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){ db.execSQL(DROP TABLE IF EXISTS mycontacts); onCreate(db); } public boolean addStudentContact(String contactname,String contactphone,String contactstreet,String contactemail,String contactplace){ / *,* / SQLiteDatabase db = this.getWritableDatabase ; ContentValues contantValues = new ContentValues(); contantValues.put(name,contactname); contantValues.put(phone,contactphone); contantValues.put(street,contactstreet); contantValues.put(email,contactemail); contantValues.put(place,contactplace); db.insert(mycontacts,null,contantValues); db.close(); return true; } public boolean updateStudentContact(Integer contactid,String contactname,String contactphone,String contactstreet,String contactemail,String contactplace) { / *,String contactname,* / SQLiteDatabase db = this.getWritableDatabase(); ContentValues contantValues = new ContentValues(); contantValues.put(name,contactname); contantValues.put(phone,contactphone); contantValues.put(street,contactstreet); contantValues.put(email,contactemail); contantValues.put(place,contactplace); db.update(mycontacts,contantValues,id =?,new String [] {Integer.toString(contactid)}); db.close(); return true; } public Integer deleteContact(Integer id){ SQLiteDatabase db = this.getWritableDatabase(); return db.delete(mycontacts,id =?,new String [] {Integer.toString(id)}); } public Cursor getData(int contactid){ SQLiteDatabase db = this.getWritableDatabase(); Cursor res = db.rawQuery(Select * from mycontacts where id =+ contactid +,null); return res; } public int numberOfRows(){ SQLiteDatabase db = this.getWritableDatabase(); int numRows =(int)DatabaseUtils.queryNumEntries(db,CONTACTS_TABLE_NAME); return numRows; } public ArrayList< Person> getAllStudentContacts(){ ArrayList< Person> arraylist = new ArrayList<>(); SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db.rawQuery(Select * from mycontacts,null); if(cursor.moveToFirst()){ do { person person = new Person(); person.name = cursor.getString(cursor.getColumnIndex(CONTACTS_COLUMN_STUNAME)); person.ID = cursor.getInt(cursor.getColumnIndex(CONTACTS_COLUMN_ID)); arraylist.add(person); } while(cursor.moveToNext()); } return arraylist; } }

DisplayContact.java

package com.test.ppandey.contactapp; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.database.Cursor; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class DisplayContact extends AppCompatActivity { int from_Where_I_Am_Coming = 0; private DBHelper mydb; TextView name; TextView phone; TextView电子邮件; TextView street; TextView place; int id_To_Update = 0; @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_display_contact); name =(TextView)findViewById(R.id.editTextName); phone =(TextView)findViewById(R.id.editTextPhone); email =(TextView)findViewById(R.id.editTextStreet); street =(TextView)findViewById(R.id.editTextEmail); place =(TextView)findViewById(R.id.editTextCity); mydb = new DBHelper(this); Bundle extras = getIntent()。getExtras(); { int Value = extras.getInt(id); if(Value> 0){ //意味着这是视图部分而不是添加联系人部分。 Cursor rs = mydb.getData(Value); id_To_Update = Value; rs.moveToFirst(); String stuname = rs.getString(rs.getColumnIndex(DBHelper.CONTACTS_COLUMN_STUNAME)); String stuphone = rs.getString(rs.getColumnIndex(DBHelper.CONTACTS_COLUMN_STUPHONE)); String stuemail = rs.getString(rs.getColumnIndex(DBHelper.CONTACTS_COLUMN_STUEMAIL)); String stustreet = rs.getString(rs.getColumnIndex(DBHelper.CONTACTS_COLUMN_STUSTREET)); String stuplace = rs.getString(rs.getColumnIndex(DBHelper.CONTACTS_COLUMN_STUCITY)); if(!rs.isClosed()){ rs.close(); } Button b =(Button)findViewById(R.id.button1); b.setVisibility(View.INVISIBLE); name.setText((CharSequence)stuname); name.setFocusable(false); name.setClickable(false); phone.setText((CharSequence)stuphone); phone.setFocusable(false); phone.setClickable(false); email.setText((CharSequence)stuemail); email.setFocusable(false); email.setClickable(false); street.setText((CharSequence)stustreet); street.setFocusable(false); street.setClickable(false); place.setText((CharSequence)stuplace); place.setFocusable(false); place.setClickable(false); } } } @Override public boolean onCreateOptionsMenu(菜单菜单){ //膨胀菜单;这会将条目添加到操作栏(如果存在)。 Bundle extras = getIntent()。getExtras(); if(extras!= null){ int Value = extras.getInt(id); if(Value> 0){ getMenuInflater()。inflate(R.menu.menu_display_contact,menu); } else { getMenuInflater()。inflate(R.menu.menu_main,menu); } } return true; } @Override public boolean onOptionsItemSelected(MenuItem item){ //处理操作栏项目点击这里。操作栏将 //自动处理Home / Up按钮的点击,所以long //在AndroidManifest.xml中指定一个父活动。 super.onOptionItemSelected(item); switch(item.getItemId()){ case R.id.Edit_Contact: Button b =(Button)findViewById(R.id.button1); b.setVisibility(View.VISIBLE); name.setEnabled(true); name.setFocusableInTouchMode(true); name.setClickable(true); phone.setEnabled(true); telephone.setFocusableInTouchMode(true); phone.setClickable(true); email.setEnabled(true); email.setFocusableInTouchMode(true); email.setClickable(true); street.setEnabled(true); street.setFocusableInTouchMode(true); street.setClickable(true); place.setEnabled(true); place.setFocusableInTouchMode(true); place.setClickable(true); return true; case R.id.Delete_Contact: AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage(R.string.deleteContact) .setPositiveButton(R.string.yes,new DialogInterface.OnClickListener(){ public void onClick(DialogInterface dialog,int id){ mydb.deleteContact(id_To_Update); Toast.makeText(getApplicationContext(),Deleted Successfully,Toast.LENGTH_SHORT).show(); Intent intent = new Intent(getApplicationContext MainActivity.class); startActivity(intent); } }) .setNegativeButton(R.string.no,new DialogInterface.OnClickListener(){ public void onClick(DialogInterface dialog,int id){ //用户取消了对话框} }); AlertDialog d = builder.create(); d.setTitle(Are you sure?); d.show(); return true; 默认值: return super.onOptionsItemSelected(item); } } public void saveData(View view){ / *,* / / * mydb.addContact .getText()。toString(),email.getText()。toString(),street.getText()。toString(),place.getText()。toString(),phone.getText finish(); * / Bundle extras = getIntent()。getExtras(); if(extras!= null){ int Value = extras.getInt(id); if(Value> 0){ if(mydb.updateStudentContact(id_To_Update,name.getText()。toString(),phone.getText()。toString(),street.getText toString(),email.getText()。toString(),place.getText()。toString())){ Toast.makeText(getApplicationContext(),Successfully Updated,Toast.LENGTH_SHORT).show ); Intent intent = new Intent(getApplicationContext(),MainActivity.class); startActivity(intent); } else { Toast.makeText(getApplicationContext(),Record not updated,Toast.LENGTH_SHORT).show(); } } else { if(mydb.addStudentContact(name.getText()。toString(),phone.getText()。toString(),street.getText()。toString ),email.getText()。toString(),place.getText()。toString())){ Toast.makeText(getApplicationContext(),Successfully Added,Toast.LENGTH_SHORT).show } else { Toast.makeText(getApplicationContext(),Record not added,Toast.LENGTH_SHORT).show(); } Intent intent = new Intent(getApplicationContext(),MainActivity.class); startActivity(intent); } } }

}

MainActivity.java

package com.test.ppandey.contactapp; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { public final static String EXTRA_MESSAGE =MESSAGE; private ListView objListView; DBHelper db; @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); db = new DBHelper(this); ArrayList< Person> arrayList = db.getAllStudentContacts(); ArrayAdapter arrayAdapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,arrayList); objListView =(ListView)findViewById(R.id.listView1); objListView.setAdapter(arrayAdapter); objListView.setOnItemClickListener(new AdapterView.OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> parent,View view,int position,long id){ long id_to_search = id; Bundle dataBundle = new Bundle(); dataBundle.putLong(id,id_to_search); Intent intent = new Intent(getApplicationContext DisplayContact.class); intent.putExtras(dataBundle); startActivity(intent); } }); } @Override public boolean onCreateOptionsMenu(菜单菜单){ //膨胀菜单;这会将条目添加到操作栏(如果存在)。 getMenuInflater()。inflate(R.menu.menu_main,menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item){ //处理操作栏项目点击这里。操作栏将 //自动处理Home / Up按钮的点击,所以long //在AndroidManifest.xml中指定一个父活动。 / * int id = item.getItemId(); // noinspection SimplifiableIfStatement if(id == R.id.action_settings){ return true; } return super.onOptionsItemSelected(item); * / super.onOptionsItemSelected(item); switch(item.getItemId()) { case R.id.item1:Bundle dataBundle = new Bundle(); dataBundle.putInt(id,0); Intent intent = new Intent(getApplicationContext(),DisplayContact.class); intent.putExtras(dataBundle); startActivityForResult(intent,0); return true; 默认值: return super.onOptionsItemSelected(item); } } @Override protected void onActivityResult(int requestCode,int resultCode,Intent data){ super.onActivityResult(requestCode,resultCode,数据); db = new DBHelper(this); ArrayList< Person> arrayList = db.getAllStudentContacts(); ArrayAdapter arrayAdapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,arrayList); objListView =(ListView)findViewById(R.id.listView1); objListView.setAdapter(arrayAdapter); }

}

activity_display_contact.xml

< ScrollView xmlns:android =schemas.android/apk/res/android xmlns:tools =schemas.android/tools android:layout_width =match_parent android:layout_height =wrap_content android: id =@ + id / scrollView1> < RelativeLayout android:layout_width =match_parent android:layout_height =350dp android:paddingLeft =@ dimen / activity_horizo​​ntal_margin android:paddingRight =@ dimen / activity_horizo​​ntal_margin android:paddingTop =@ dimen / activity_vertical_margin android:paddingBottom =@ dimen / activity_vertical_margin tools:context =com。 test.ppandey.contactapp.DisplayContact> < EditText android:id =@ + id / editTextName android:layout_width =wrap_content android:layout_height =wrap_content android:layout_alignParentLeft =true android:layout_marginTop =5dp android:layout_marginLeft =82dp android:ems =10 android:inputType = text> < / EditText> < EditText android:id =@ + id / editTextEmail android:layout_width =wrap_content android:layout_height =wrap_content android:layout_alignLeft =@ + id / editTextStreet android:layout_below =@ + id / editTextStreet android:layout_marginTop =22dp android:ems =10 android:inputType =textEmailAddress/> < TextView android:id =@ + id / textView1 android:layout_width =wrap_content android:layout_height =wrap_content android:layout_alignBottom =@ + id / editTextName android:layout_alignParentLeft =true android:text =@ string / name android:textAppearance =? attr / textAppearanceMedium/> < Button android:id =@ + id / button1 android:layout_width =wrap_content android:layout_height =wrap_content android:layout_alignLeft =@ + id / editTextCity android:layout_alignParentBottom =true android:layout_marginBottom =28dp android:onClick =saveData android:text =@ string / save/> < TextView android:id =@ + id / textView2 android:layout_width =wrap_content android:layout_height =wrap_content android:layout_alignBottom =@ + id / editTextEmail android:layout_alignLeft =@ + id / textView1 android:text =@ string / email android:textAppearance = ?android:attr / textAppearanceMedium/> < TextView android:id =@ + id / textView5 android:layout_width =wrap_content android:layout_height =wrap_content android:layout_alignBottom =@ + id / editTextPhone android:layout_alignLeft =@ + id / textView1 android:text =@ string / phone android:textAppearance = ?android:attr / textAppearanceMedium/> < TextView android:id =@ + id / textView4 android:layout_width =wrap_content android:layout_height =wrap_content android:layout_above =@ + id / editTextEmail android:layout_alignLeft =@ + id / textView5 android:text =@ string / street android:textAppearance = ?android:attr / textAppearanceMedium/> < EditText android:id =@ + id / editTextCity android:layout_width =wrap_content android:layout_height =wrap_content android:layout_alignRight =@ + id / editTextName android:layout_below =@ + id / editTextEmail android:layout_marginTop =30dp android:ems =10 android:inputType =text/> < TextView android:id =@ + id / textView3 android:layout_width =wrap_content android:layout_height =wrap_content android:layout_alignBaseline =@ + id / editTextCity android:layout_alignBottom =@ + id / editTextCity android:layout_alignParentLeft =true android:layout_toLeftOf =@ id / editTextEmail android:text =@ string / country android:textAppearance =?android:attr / textAppearanceMedium/> < EditText android:id =@ + id / editTextStreet android:layout_width =wrap_content android:layout_height =wrap_content android:layout_alignLeft =@ + id / editTextName android:layout_below =@ + id / editTextPhone android:ems =10 android:inputType =text > < requestFocus /> < / EditText> &EditText android:id =@ + id / editTextPhone android:layout_width =wrap_content android:layout_height =wrap_content android:layout_alignLeft =@ + id / editTextStreet android:layout_below =@ + id / editTextName android:ems =10 android:inputType =phone |文本/> < / RelativeLayout> < / ScrollView>

Person.java

package com.test.ppandey.contactapp; / ** *创建者Ariel on 08/03/2016。 * / public class Person { public String name; public long ID; 私人{ name = new String(name); } private Person id; { ID = new long(id); } }

我添加了Person.java并编辑MainActivity.java和DBHelper.java

解决方案

这是你的问题:

int id_to_search = position + 1;

您假设ID和位置是同步的。这只是真的,只要你不删除任何条目。

当您从数据库中提取条目时,您需要将

下面的一些代码(只是一个框架):

1)为您的数据创建一个模型

public class Person { //考虑使私有和添加访问器 public String name; public long id; }

2)当你拉你的数据,拉名字和ID可以扩展Person类和此函数来拉取附加数据):

public List< Person> getAllStudentContacts(){ List< Person> arraylist = new ArrayList<>(); SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db.rawQuery(Select * from mycontacts,null); if(cursor.moveToFirst()){ do { person person = new Person(); person.name = cursor.getString(cursor.getColumnIndex(CONTACTS_COLUMN_STUNAME)); person.id = cursor.getInt(cursor.getColumIndex(CONTACTS_COLUMN_ID)); arraylist.add(prson); } while(cursor.moveToNext()); } return arraylist;然后在你的适配器中使用Person对象中的ID来引用它,而不是位置。

Good Day everyone. I have this code and i face problem in deleting. For example, my list of names are Junko, Gemina and Fukar. If i view each, they show same details. Now, if I delete any of them, ex. I delete Fukar, it will be deleted successfully but when I click on Gemina, the detail that appears is of Junko. If i click Junko, it says "Unfortunately the app stopped working". If I add new Name, ex. Nimrod, It will add successfully, but when i view Nimrod, the detail of Gemina will appear. And if i add another name, Vourin, the data of Gemina will appear its like their ids are interchanged and I think the error is in the delete part. I appreciate any comment. Thanks.

Below is my DBHelper.java

import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.DatabaseUtils; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import java.util.ArrayList; import java.util.HashMap; public class DBHelper extends SQLiteOpenHelper { public static final String DATABASE_NAME = "contactdb.sqlite"; public static final String CONTACTS_TABLE_NAME = "mycontacts"; public static final String CONTACTS_COLUMN_ID = "id"; public static final String CONTACTS_COLUMN_STUNAME = "name"; public static final String CONTACTS_COLUMN_STUPHONE = "phone"; public static final String CONTACTS_COLUMN_STUSTREET = "street"; public static final String CONTACTS_COLUMN_STUEMAIL = "email"; public static final String CONTACTS_COLUMN_STUCITY = "place"; private HashMap hp; public DBHelper(Context context) { super(context, DATABASE_NAME , null, 3); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL( "create table mycontacts " + "(id integer primary key autoincrement, name text,phone text,email text, street text,place text)" ); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS mycontacts"); onCreate(db); } public boolean addStudentContact(String contactname,String contactphone,String contactstreet,String contactemail, String contactplace){ /*,*/ SQLiteDatabase db=this.getWritableDatabase(); ContentValues contantValues = new ContentValues(); contantValues.put("name",contactname); contantValues.put("phone", contactphone); contantValues.put("street",contactstreet); contantValues.put("email",contactemail); contantValues.put("place",contactplace); db.insert("mycontacts", null, contantValues); db.close(); return true; } public boolean updateStudentContact(Integer contactid,String contactname,String contactphone,String contactstreet,String contactemail, String contactplace) { /*,String contactname,*/ SQLiteDatabase db=this.getWritableDatabase(); ContentValues contantValues = new ContentValues(); contantValues.put("name",contactname); contantValues.put("phone", contactphone); contantValues.put("street",contactstreet); contantValues.put("email",contactemail); contantValues.put("place",contactplace); db.update("mycontacts", contantValues, "id = ?", new String[]{Integer.toString(contactid)}); db.close(); return true; } public Integer deleteContact(Integer id){ SQLiteDatabase db=this.getWritableDatabase(); return db.delete("mycontacts","id = ?",new String[]{Integer.toString(id)}); } public Cursor getData(int contactid){ SQLiteDatabase db=this.getWritableDatabase(); Cursor res=db.rawQuery("Select * from mycontacts where id = " + contactid + "", null); return res; } public int numberOfRows(){ SQLiteDatabase db=this.getWritableDatabase(); int numRows=(int) DatabaseUtils.queryNumEntries(db,CONTACTS_TABLE_NAME); return numRows; } public ArrayList<Person> getAllStudentContacts(){ ArrayList<Person> arraylist= new ArrayList<>(); SQLiteDatabase db=this.getReadableDatabase(); Cursor cursor=db.rawQuery("Select * from mycontacts",null); if (cursor.moveToFirst()) { do { Person person = new Person(); person.name = cursor.getString(cursor.getColumnIndex(CONTACTS_COLUMN_STUNAME)); person.ID = cursor.getInt(cursor.getColumnIndex(CONTACTS_COLUMN_ID)); arraylist.add(person); } while (cursor.moveToNext()); } return arraylist; } }

DisplayContact.java

package com.test.ppandey.contactapp; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.database.Cursor; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class DisplayContact extends AppCompatActivity { int from_Where_I_Am_Coming = 0; private DBHelper mydb; TextView name; TextView phone; TextView email; TextView street; TextView place; int id_To_Update = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_display_contact); name = (TextView) findViewById(R.id.editTextName); phone = (TextView) findViewById(R.id.editTextPhone); email = (TextView) findViewById(R.id.editTextStreet); street = (TextView) findViewById(R.id.editTextEmail); place = (TextView) findViewById(R.id.editTextCity); mydb = new DBHelper(this); Bundle extras = getIntent().getExtras(); { int Value = extras.getInt("id"); if (Value > 0) { //means this is the view part not the add contact part. Cursor rs = mydb.getData(Value); id_To_Update = Value; rs.moveToFirst(); String stuname = rs.getString(rs.getColumnIndex(DBHelper.CONTACTS_COLUMN_STUNAME)); String stuphone = rs.getString(rs.getColumnIndex(DBHelper.CONTACTS_COLUMN_STUPHONE)); String stuemail = rs.getString(rs.getColumnIndex(DBHelper.CONTACTS_COLUMN_STUEMAIL)); String stustreet = rs.getString(rs.getColumnIndex(DBHelper.CONTACTS_COLUMN_STUSTREET)); String stuplace = rs.getString(rs.getColumnIndex(DBHelper.CONTACTS_COLUMN_STUCITY)); if (!rs.isClosed()) { rs.close(); } Button b = (Button) findViewById(R.id.button1); b.setVisibility(View.INVISIBLE); name.setText((CharSequence) stuname); name.setFocusable(false); name.setClickable(false); phone.setText((CharSequence) stuphone); phone.setFocusable(false); phone.setClickable(false); email.setText((CharSequence) stuemail); email.setFocusable(false); email.setClickable(false); street.setText((CharSequence) stustreet); street.setFocusable(false); street.setClickable(false); place.setText((CharSequence) stuplace); place.setFocusable(false); place.setClickable(false); } } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. Bundle extras = getIntent().getExtras(); if (extras != null) { int Value = extras.getInt("id"); if (Value > 0) { getMenuInflater().inflate(R.menu.menu_display_contact, menu); } else { getMenuInflater().inflate(R.menu.menu_main, menu); } } return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. super.onOptionsItemSelected(item); switch (item.getItemId()) { case R.id.Edit_Contact: Button b = (Button) findViewById(R.id.button1); b.setVisibility(View.VISIBLE); name.setEnabled(true); name.setFocusableInTouchMode(true); name.setClickable(true); phone.setEnabled(true); phone.setFocusableInTouchMode(true); phone.setClickable(true); email.setEnabled(true); email.setFocusableInTouchMode(true); email.setClickable(true); street.setEnabled(true); street.setFocusableInTouchMode(true); street.setClickable(true); place.setEnabled(true); place.setFocusableInTouchMode(true); place.setClickable(true); return true; case R.id.Delete_Contact: AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage(R.string.deleteContact) .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { mydb.deleteContact(id_To_Update); Toast.makeText(getApplicationContext(), "Deleted Successfully", Toast.LENGTH_SHORT).show(); Intent intent = new Intent(getApplicationContext(), MainActivity.class); startActivity(intent); } }) .setNegativeButton(R.string.no, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { // User cancelled the dialog } }); AlertDialog d = builder.create(); d.setTitle("Are you sure ?"); d.show(); return true; default: return super.onOptionsItemSelected(item); } } public void saveData(View view) { /*, */ /* mydb.addContact(name.getText().toString(),email.getText().toString(), street.getText().toString(), place.getText().toString(), phone.getText().toString()); finish();*/ Bundle extras = getIntent().getExtras(); if (extras != null) { int Value = extras.getInt("id"); if (Value > 0) { if (mydb.updateStudentContact(id_To_Update, name.getText().toString(), phone.getText().toString(), street.getText().toString(),email.getText().toString(), place.getText().toString())) { Toast.makeText(getApplicationContext(), "Successfully Updated", Toast.LENGTH_SHORT).show(); Intent intent = new Intent(getApplicationContext(), MainActivity.class); startActivity(intent); } else { Toast.makeText(getApplicationContext(), "Record not updated", Toast.LENGTH_SHORT).show(); } } else { if (mydb.addStudentContact(name.getText().toString(), phone.getText().toString(),street.getText().toString(), email.getText().toString(), place.getText().toString())) { Toast.makeText(getApplicationContext(), "Successfully Added", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(getApplicationContext(), "Record not added", Toast.LENGTH_SHORT).show(); } Intent intent = new Intent(getApplicationContext(), MainActivity.class); startActivity(intent); } } }

}

MainActivity.java

package com.test.ppandey.contactapp; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { public final static String EXTRA_MESSAGE="MESSAGE"; private ListView objListView; DBHelper db; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); db=new DBHelper(this); ArrayList<Person> arrayList=db.getAllStudentContacts(); ArrayAdapter arrayAdapter=new ArrayAdapter(this,android.R.layout.simple_list_item_1,arrayList); objListView=(ListView)findViewById(R.id.listView1); objListView.setAdapter(arrayAdapter); objListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { long id_to_search = id; Bundle dataBundle = new Bundle(); dataBundle.putLong("id", id_to_search); Intent intent = new Intent(getApplicationContext(), DisplayContact.class); intent.putExtras(dataBundle); startActivity(intent); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. /* int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item);*/ super.onOptionsItemSelected(item); switch(item.getItemId()) { case R.id.item1:Bundle dataBundle = new Bundle(); dataBundle.putInt("id", 0); Intent intent = new Intent(getApplicationContext(),DisplayContact.class); intent.putExtras(dataBundle); startActivityForResult(intent, 0); return true; default: return super.onOptionsItemSelected(item); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); db=new DBHelper(this); ArrayList<Person> arrayList=db.getAllStudentContacts(); ArrayAdapter arrayAdapter=new ArrayAdapter(this,android.R.layout.simple_list_item_1,arrayList); objListView=(ListView)findViewById(R.id.listView1); objListView.setAdapter(arrayAdapter); }

}

activity_display_contact.xml

<ScrollView xmlns:android="schemas.android/apk/res/android" xmlns:tools="schemas.android/tools" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/scrollView1" > <RelativeLayout android:layout_width="match_parent" android:layout_height="350dp" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context="com.test.ppandey.contactapp.DisplayContact"> <EditText android:id="@+id/editTextName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_marginTop="5dp" android:layout_marginLeft="82dp" android:ems="10" android:inputType="text" > </EditText> <EditText android:id="@+id/editTextEmail" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/editTextStreet" android:layout_below="@+id/editTextStreet" android:layout_marginTop="22dp" android:ems="10" android:inputType="textEmailAddress" /> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/editTextName" android:layout_alignParentLeft="true" android:text="@string/name" android:textAppearance="?android:attr/textAppearanceMedium" /> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/editTextCity" android:layout_alignParentBottom="true" android:layout_marginBottom="28dp" android:onClick="saveData" android:text="@string/save" /> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/editTextEmail" android:layout_alignLeft="@+id/textView1" android:text="@string/email" android:textAppearance="?android:attr/textAppearanceMedium" /> <TextView android:id="@+id/textView5" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/editTextPhone" android:layout_alignLeft="@+id/textView1" android:text="@string/phone" android:textAppearance="?android:attr/textAppearanceMedium" /> <TextView android:id="@+id/textView4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@+id/editTextEmail" android:layout_alignLeft="@+id/textView5" android:text="@string/street" android:textAppearance="?android:attr/textAppearanceMedium" /> <EditText android:id="@+id/editTextCity" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignRight="@+id/editTextName" android:layout_below="@+id/editTextEmail" android:layout_marginTop="30dp" android:ems="10" android:inputType="text" /> <TextView android:id="@+id/textView3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/editTextCity" android:layout_alignBottom="@+id/editTextCity" android:layout_alignParentLeft="true" android:layout_toLeftOf="@+id/editTextEmail" android:text="@string/country" android:textAppearance="?android:attr/textAppearanceMedium" /> <EditText android:id="@+id/editTextStreet" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/editTextName" android:layout_below="@+id/editTextPhone" android:ems="10" android:inputType="text" > <requestFocus /> </EditText> <EditText android:id="@+id/editTextPhone" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/editTextStreet" android:layout_below="@+id/editTextName" android:ems="10" android:inputType="phone|text" /> </RelativeLayout> </ScrollView>

Person.java

package com.test.ppandey.contactapp; /** * Created by Ariel on 08/03/2016. */ public class Person { public String name; public long ID; private Person person; { name = new String(name); } private Person id; { ID = new long(id); } }

I added Person.java and edited MainActivity.java and DBHelper.java

解决方案

This is your problem:

int id_to_search = position + 1;

You are assuming that the IDs and the positions are in sync. This is only true as long as you do not remove any entries. Instead of using the position to reference an entry, you have to use the ID, as that's immutable.

When you pull the entries from your database, you need to pull the name and the ID, and keep that data in your adapter, so you can reference an entry by its ID.

Some code below (just a skeleton):

1) Create a model for your data

public class Person { // consider making private and adding accessors public String name; public long id; }

2) when you pull your data, pull the name and the ID (you may expand the Person class and this function to pull additional data):

public List<Person> getAllStudentContacts(){ List<Person> arraylist= new ArrayList<>(); SQLiteDatabase db=this.getReadableDatabase(); Cursor cursor=db.rawQuery("Select * from mycontacts",null); if (cursor.moveToFirst()) { do { Person person = new Person(); person.name = cursor.getString(cursor.getColumnIndex(CONTACTS_COLUMN_STUNAME)); person.id = cursor.getInt(cursor.getColumIndex(CONTACTS_COLUMN_ID)); arraylist.add(prson); } while (cursor.moveToNext()); } return arraylist; }

Then in your adapter you use the ID in the Person object to reference it, instead of the position.

更多推荐

数据库的ID是互换android sqlite

本文发布于:2023-10-07 20:08:07,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1470412.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:数据库   ID   sqlite   android

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!