I am trying to develop an application similar to phone book. I have displayed contacts using listview also upon clicking them I can get the contact details. I can search the contact also. Now if I search a contact and click on it , wrong data is getting displayed. I have attached all the files related to it.
-- You received this message because you are subscribed to the Google Groups "Android Discuss" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/android-discuss. To view this discussion on the web visit https://groups.google.com/d/msgid/android-discuss/63712855-5822-42ee-9afd-6aac6724d56b%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
package com.example.contactmanager;
import DTO.DD;
import Dao.Contact;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Spinner;
import android.widget.Toast;
public class Addcontacts extends Activity {
EditText t1,t2,t3,t4,t5;
int x=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.add_contact);
initView();
}
private void initView()
{
t1=(EditText)findViewById(R.id.name1);
t2=(EditText)findViewById(R.id.phone1);
t3=(EditText)findViewById(R.id.email1);
t4=(EditText)findViewById(R.id.street1);
t5=(EditText)findViewById(R.id.note1);
}
public void submit(View v){
if(t1.getText().toString().equals("") && t2.getText().toString().equals("") && t3.getText().toString().equals("") && t4.getText().toString().equals("") && t5.getText().toString().equals(""))
{
Toast.makeText(this, "Please enter something ", 10000).show();
}
else
{
int x=1;
int yy = (int) System.currentTimeMillis();
/*DD d2=new DD();
d2.setName(c_name);
d2.setPhone(a1);
d2.setEmail(a2);
d2.setAdr(a3);
d2.setNote(a4);*/
Contact qd=new Contact(this);
qd.openCon();
//Cursor c = null;
Cursor c = qd.getAllContacts();
if( c.moveToFirst() )
{
String c_name=t1.getText().toString();
String a1=t2.getText().toString();
String a2=t3.getText().toString();
String a3=t4.getText().toString();
String a4=t5.getText().toString();
do
{
x++;
}
while(c.moveToNext());
{
if(qd.insert(yy,c_name,a1,a2,a3,a4)>0)
Toast.makeText(this, "Saved ", 10000).show();
}
/*Intent in=new Intent(Addcontacts.this,MainActivity.class);
startActivity(in);*/
finish();
}
else
{String c_name=t1.getText().toString();
String a1=t2.getText().toString();
String a2=t3.getText().toString();
String a3=t4.getText().toString();
String a4=t5.getText().toString();
if(qd.insert(yy,c_name,a1,a2,a3,a4)>0)
Toast.makeText(this, "Saved ", 10000).show();
}
qd.closeCon();
/*Intent in=new Intent(Addcontacts.this,MainActivity.class);
startActivity(in);*/
finish();
}
}
@Override
protected void onPause() {
super.onPause();
Intent in=new Intent(Addcontacts.this,MainActivity.class);
startActivity(in);
finish();
}
@Override
protected void onStop() {
super.onStop();
}
@Override
protected void onDestroy() {
super.onDestroy();
}
}
add_contact.xml
Description: XML document
/*import java.util.ArrayList;
import java.util.HashMap;
import android.content.Context;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
public class PatientList extends Activity{
PatientDB patientDB;
Context myContext;
ListView lv_patients;
EditText et_patients;
ArrayAdapter<String> adapter;
ArrayList<HashMap<String, String>> patientList;
static String value;
String[] patientarray = new String[]{"initials"};
ArrayList<String> patientArrayList = new ArrayList<String>();
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_patient_list);
myContext = this;
patientDB = new PatientDB(myContext);
patientDB.open();
Cursor patientCursor;
patientCursor = patientDB.retrieveAllEntriesCursor();
if(patientCursor!=null && patientCursor.getCount()>0)
{
String patientInitials;
patientCursor.moveToFirst();
do
{
patientCursor.getString(patientDB.COLUMN_KEY_ID); // + " " +
patientInitials = patientCursor.getString(patientDB.COLUMN_INITIALS_ID);
Log.i("FromCursor", patientInitials);
patientArrayList.add(patientInitials);
} while (patientCursor.moveToNext());
}
lv_patients = (ListView) findViewById(R.id.lv_patients);
et_patients = (EditText) findViewById(R.id.et_patients);
lv_patients.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// TODO Auto-generated method stub
String a = patientArrayList.get(position);
Toast.makeText(PatientList.this, a + " selected", Toast.LENGTH_SHORT).show();
Intent returnIntent = new Intent(PatientList.this, PatientInfo.class);
returnIntent.putExtra("value", a);
setResult(RESULT_OK, returnIntent);
finish();
}
});
//Adding items to listview
adapter = new ArrayAdapter<String>(this, R.layout.list_patients, R.id.patient_name, patientArrayList);
lv_patients.setAdapter(adapter);
//Enabling search filter
et_patients.addTextChangedListener(new TextWatcher() {
public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
// When user changed the Text
PatientList.this.adapter.getFilter().filter(cs);
}
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
// TODO Auto-generated method stub
}
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
}
});
}*/
activity_main.xml
Description: XML document
activity_main_actions.xml
Description: XML document
package Dao;
import DTO.DD;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class Contact {
private static final String ROW="id";
private static final String NAME="name";
private static final String PHONE="phone";
private static final String EMAIL="email";
private static final String ADDRESS="adr";
private static final String NOTE="note";
private static final int VERSION=1;
private static final String DATABASE="contact.db";//ducat
private static final String TABLE="address";//javadata
private static final String CREATE="create table address (id integer , name varchar(20)," +
"phone varchar(20),email varchar(20),adr varchar(150),note varchar(200));";
Helper h;
SQLiteDatabase sd;
private String whereClause;
public Contact(Context context){
h=new Helper(context);
}
public void openCon(){
sd=h.getWritableDatabase();
}
public void closeCon(){
sd.close();
}
public long insert(long id, String name,String phone,String email,String adr,String note){
ContentValues c=new ContentValues();
c.put(ROW,id);
c.put(NAME,name);
c.put(PHONE,phone);
c.put(EMAIL,email);
c.put(ADDRESS,adr);
c.put(NOTE,note);
return sd.insert(TABLE, null, c);
}
/*String name,String phone,String email,String adr,String note NAME="name";
private static final String PHONE="phone";
private static final String EMAIL="email";
private static final String ADDRESS="adr";
private static final String NOTE="note";
*/
/*public boolean update(long id,String name,String phone,String email,String adr,String note ){
ContentValues c=new ContentValues();
c.put(ROW,id);
c.put(NAME,name);
c.put(PHONE,phone);
c.put(EMAIL,email);
c.put(ADDRESS,adr);
c.put(NOTE,note);
// return sd.update(TABLE, c, ROW + "=" + id, null);
return sd.update(TABLE, c, "id=?", null) > 0;*/
public long deleted(){
return sd.delete(TABLE, "id not in (select max(id) from address group by name,phone,email,adr,note)", null);
}
/*ROW="id";
private static final String NAME="name";
private static final String PHONE="phone";
private static final String EMAIL="email";
private static final String ADDRESS="adr";
private static final String NOTE="note";*/
public int updatecc(long k, String name, String phone, String email, String adr, String note)
{
Log.e("****************", "hello" + k);
ContentValues c=new ContentValues();
c.put(NAME,name);
c.put(PHONE,phone);
c.put(EMAIL,email);
c.put(ADDRESS,adr);
c.put(NOTE,note);
return sd.update(TABLE, c, ROW + "=" + k , null) ;
}
public boolean deleteCon(int k){
return sd.delete(TABLE, ROW + "=" + k, null) > 0;
//return sd.delete(TABLE, "name = ? ",new String[]{name})>0 ;
//sd.delete(TABLE, NAME + "=" + n,PHONE + "=" + p,EMAIL + "=" + e, ADDRESS + "=" + a, NOTE + "=" + not, null)>0
}/*
public long delete(String email){
return sd.delete(TABLE, "email=? ", new String[]{email});
}*/
public Cursor getAllContacts()
{
return sd.query(TABLE,new String[]{ROW,NAME,PHONE,EMAIL,ADDRESS,NOTE}, null, null, null, null, "name asc", null);
}
private class Helper extends SQLiteOpenHelper
{
public Helper(Context context) {
super(context, DATABASE, null, VERSION);
} @Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//do some stubs for upgrading..
}
}
}package DTO;
public class DD {
private String name;
private String phone;
private String email;
private String adr;
private String note;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getAdr() {
return adr;
}
public void setAdr(String adr) {
this.adr = adr;
}
public String getNote() {
return note;
}
public void setNote(String note) {
this.note = note;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return name ;
}
}
edit_cont.xml
Description: XML document
package com.example.contactmanager;
import Dao.Contact;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
public class EditContact extends Activity {
int i=0 , id ;
EditText t1,t2,t3,t4,t5;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.edit_cont);
int id = getIntent().getExtras().getInt("ContactID");
Log.e("****************", "5" + id);
initView();
Contact d=new Contact(this);
d.openCon();
Cursor c = d.getAllContacts();
/* int pt = Integer.parseInt(c.getString(0));
Toast.makeText(this, "delete successfull" + pt, 10000).show();*/
/* t1.setText(c.getString(1));
t2.setText(c.getString(2));
t3.setText(c.getString(3));
t4.setText(c.getString(4));
t5.setText(c.getString(5));*/
if( c.moveToFirst() && id==0)
{
t1.setText(c.getString(1));
t2.setText(c.getString(2));
t3.setText(c.getString(3));
t4.setText(c.getString(4));
t5.setText(c.getString(5));
}
else
{
do
{
i++;
}while(c.moveToNext() && i<id);
}
t1.setText(c.getString(1));
t2.setText(c.getString(2));
t3.setText(c.getString(3));
t4.setText(c.getString(4));
t5.setText(c.getString(5));
d.closeCon();
}
public void save2(View v)
{
int id = getIntent().getExtras().getInt("ContactID");
initView();
int i=0;
Contact qd=new Contact(this);
qd.openCon();
Cursor c = qd.getAllContacts();
if( c.moveToFirst() && id==0)
{
int j =id+1;
int pt = Integer.parseInt(c.getString(0));
String c_name=t1.getText().toString();
String a1=t2.getText().toString();
String a2=t3.getText().toString();
String a3=t4.getText().toString();
String a4=t5.getText().toString();
if(qd.updatecc(pt, c_name, a1, a2, a3, a4)>0)//id starts with 0 but in db id starts with 1
Toast.makeText(this, "update successfull", 10000).show();
}
else
{
while(i<id)
{
c.moveToNext();
i++;
}
int pt = Integer.parseInt(c.getString(0));
String c_name=t1.getText().toString();
String a1=t2.getText().toString();
String a2=t3.getText().toString();
String a3=t4.getText().toString();
String a4=t5.getText().toString();
int k = i+1;
// Toast.makeText(this,c.getString(1), 10000).show();
if(qd.updatecc(pt,c_name, a1,a2,a3,a4)>0)
Toast.makeText(this, "update successfull", 10000).show();
}
qd.closeCon();
finish();
/*Intent in=new Intent(this,MainActivity.class);
startActivity(in);
*/
}
public void delete(View v){
int id = getIntent().getExtras().getInt("ContactID");
initView();
int i=0;
Contact qd=new Contact(this);
qd.openCon();
Cursor c = qd.getAllContacts();
if( c.moveToFirst() && id==0)
{
int j =id+1;
int pt = Integer.parseInt(c.getString(0));
String c_name=t1.getText().toString();
String a1=t2.getText().toString();
String a2=t3.getText().toString();
String a3=t4.getText().toString();
String a4=t5.getText().toString();
if(qd.deleteCon(pt))
Toast.makeText(this, "deleted", 10000).show();
/*if(qd.updatecc(pt, c_name, a1, a2, a3, a4)>0)//id starts with 0 but in db id starts with 1
Toast.makeText(this, "update successfull", 10000).show();*/
}
else
{
while(i<id)
{
c.moveToNext();
i++;
}
int pt = Integer.parseInt(c.getString(0));
String c_name=t1.getText().toString();
String a1=t2.getText().toString();
String a2=t3.getText().toString();
String a3=t4.getText().toString();
String a4=t5.getText().toString();
int k = i+1;
//Toast.makeText(this,c.getString(1), 10000).show();
if(qd.deleteCon(pt))
Toast.makeText(this, "deleted", 10000).show();
}
qd.closeCon();
finish();
/*Intent in=new Intent(this,MainActivity.class);
startActivity(in);
finish();*/
//why given below code didn't work ?
/*initView();
int id = getIntent().getExtras().getInt("ContactID");
Log.e("****************", "5" + id);
Contact d=new Contact(this);
d.openCon();
Cursor c = d.getAllContacts();
if( c.moveToFirst() && id==0)
{
t1.setText(c.getString(1));
t2.setText(c.getString(2));
t3.setText(c.getString(3));
t4.setText(c.getString(4));
t5.setText(c.getString(5));
}
else
{
do
{
i++;
}while(c.moveToNext() && i<id);
}
c.moveToFirst();
Log.e("****************", "5" + i);
while(i<id )
{
c.moveToNext();
i=i+1;
// int pt = Integer.parseInt(c.getString(0));
}
if( c.moveToFirst())
{
do
{
i=i+1;
}while( c.moveToNext() && i<id);
}
int x= pt + 1;
String ptr = c.getString(1);
String c_name=t1.getText().toString();
String a1=t2.getText().toString();
String a2=t3.getText().toString();
String a3=t4.getText().toString();
String a4=t5.getText().toString();
Toast.makeText(this, ptr, 10000).show();
//Toast.makeText(this, "delete successfull" + pt, 10000).show();
//if(d.deleteCon(pt))
//Toast.makeText(this, "delete successfull", 10000).show();
d.closeCon();
Intent in=new Intent(this,MainActivity.class);
startActivity(in);
finish();*/
}
private void initView()
{
t1=(EditText)findViewById(R.id.name2);
t2=(EditText)findViewById(R.id.phone2);
t3=(EditText)findViewById(R.id.email2);
t4=(EditText)findViewById(R.id.street2);
t5=(EditText)findViewById(R.id.note2);
}
@Override
protected void onPause() {
super.onPause();
Intent in=new Intent(this,MainActivity.class);
startActivity(in);
finish();
}
}
main.xml
Description: XML document
package com.example.contactmanager;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.security.PrivateKey;
import java.util.ArrayList;
import DTO.DD;
import Dao.Contact;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.ContactsContract;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.CursorLoader;
import android.content.Intent;
import android.content.res.AssetFileDescriptor;
import android.database.Cursor;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.CursorAdapter;
import android.widget.EditText;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
public class MainActivity extends Activity{
ListView lv;
EditText inputSearch;
ArrayAdapter<String> adapter;
String vfile;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView lv=(ListView)findViewById(R.id.listView1);
// ListView lv1=(ListView)findViewById(R.id.listView1);
inputSearch = (EditText) findViewById(R.id.inputSearch);
Contact d=new Contact(this);
d.openCon();
Cursor c=d.getAllContacts();
ArrayList a=new ArrayList();
while(c.moveToNext()){
DD d1=new DD();
d1.setName(c.getString(1));
a.add(d1);
}
adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, a);
lv.setAdapter(adapter);
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position,
long arg3) {
Intent in = new Intent(getApplicationContext() , EditContact.class);
//Intent in = new Intent ("com.example.EditContact");
//Toast.makeText(getApplicationContext(), "" + a , 10000).show();
in.putExtra("ContactID", position);
startActivity(in);
finish();
}
});
d.closeCon();
inputSearch.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
// TODO Auto-generated method stub
adapter.getFilter().filter(arg0);
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
}
}) ;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.activity_main_actions, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Take appropriate action for each action item click
switch (item.getItemId()) {
case R.id.add_contact:
Addcontact();
return true;
case R.id.importcontact:
final ProgressDialog dialog = ProgressDialog.show(
this, "Doing something", "Please wait...", true);
new Thread(new Runnable(){
public void run(){
try {
//---simulate doing something lengthy---
Thread.sleep(500);
//---dismiss the dialog---
dialog.dismiss();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
Importcontact();
return true;
/* case R.id.exportcontact:*/
//Export code
// return true;
case R.id.removediplicate:
//remove duplicate
Contact d=new Contact(this);
d.openCon();
Cursor c = d.getAllContacts();
final ProgressDialog dialog1 = ProgressDialog.show(
this, "Doing something", "Please wait...", true);
new Thread(new Runnable(){
public void run(){
try {
//---simulate doing something lengthy---
Thread.sleep(500);
//---dismiss the dialog---
dialog1.dismiss();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
if( d.deleted()>0)
Toast.makeText(this, "duplicates removed", 10000).show();
d.closeCon();
Intent i = new Intent( getApplicationContext(), MainActivity.class);
startActivity(i);
finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
private void Importcontact()
{
Uri allContacts = ContactsContract.Contacts.CONTENT_URI;
Cursor c1;
if (android.os.Build.VERSION.SDK_INT <11) {
//---before Honeycomb---
c1 = managedQuery(allContacts, null,
null,
null, null);
} else {
//---Honeycomb and later---
CursorLoader cursorLoader = new CursorLoader(
this,
allContacts,
null,
null,
null,null);
c1 = cursorLoader.loadInBackground();
}
Contact d=new Contact(this);
d.openCon();
if (c1.moveToFirst()) {
do{
String contactID =
c1.getString(c1.getColumnIndex(
ContactsContract.Contacts._ID));
String contactDisplayName =
c1.getString(c1.getColumnIndex(
ContactsContract.Contacts.DISPLAY_NAME));
String hasPhone = c1.getString(c1.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
if ((Integer.parseInt(hasPhone)==1 ))
{
Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactID,
null, null);
while (phones.moveToNext())
{
int yy = (int) System.currentTimeMillis();
String number = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
if(d.insert(yy,contactDisplayName,number ,null,null,null)>0);
}
phones.close();
}
}
while (c1.moveToNext());
}
d.closeCon();
Intent i = new Intent( getApplicationContext(), MainActivity.class);
startActivity(i);
finish();
}
private void Addcontact() {
final ProgressDialog dialog = ProgressDialog.show(
this, "Doing something", "Please wait...", true);
new Thread(new Runnable(){
public void run(){
try {
//---simulate doing something lengthy---
Thread.sleep(500);
//---dismiss the dialog---
dialog.dismiss();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
Intent i = new Intent(MainActivity.this, Addcontacts.class);
startActivityForResult(i,1);
finish();
}
}Filter in android is taking the wrong position I am trying to develop an application similar to phone book. I have displayed contacts using listview also upon clicking them I can get the contact details. I can search the contact also. Now if I search a contact and click on it , wrong data is getting displayed. I have attached all the files related to it.
