数据库的ID是互换android sqlite [英] database id's are interchanged android sqlite

查看:146
本文介绍了数据库的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 =http://schemas.android.com/apk/res/android 
xmlns:tools =http://schemas.android.com/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="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆