2016-03-31 2 views
0

Ich versuche, einen Kontakt in der Datenbank von Android hinzuzufügen, aber es fügt mehrere Einträge mit demselben Namen hinzu.Ich versuche, einzelnen Namen in der SQLite-Datenbank von Android hinzuzufügen, aber es fügt mehrere Einträge mit demselben Namen hinzu

//Function to add single name/group name in database class 
    public void createGroup(GroupsDetail gd){ 
     SQLiteDatabase db = this.getWritableDatabase(); 
     ContentValues values = new ContentValues(); 
     // put values in database 
     values.put(group_NAME , gd.getName()); 
     db.insert(table_Group , null , values); 
     // close database transaction 
     db.close(); 
} 

//Function to get all names/group names in database class 
    public List<GroupsDetail> getallcontacts(){ 
     List<GroupsDetail> groupList = new ArrayList<GroupsDetail>(); 
     String query = "SELECT * From " + table_Group; 
     //get referance of ContactAS database 
     SQLiteDatabase db = this.getWritableDatabase(); 
     Cursor cursor = db.rawQuery(query, null); 
     GroupsDetail group = null; 
     if(cursor.moveToFirst()){ 
     do{ 
      group = new GroupsDetail(); 
      group.setId(Integer.parseInt(cursor.getString(0))); 
      group.setName(cursor.getString(1)); 
      groupList.add(group); 
      }while(cursor.moveToNext()); 
    } 

    return groupList; 
} 

//Code of main class 
import java.util.ArrayList; 
import java.util.List; 
import android.app.Activity; 
import android.content.Context; 
import android.os.Bundle; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.ListView; 

public class Groups extends Activity{ 
Button Addgroup,Delgroup; 
ListView groupnames; 
GroupsDetail gd; 
ArrayList<String> listItems; 
List<GroupsDetail> gdlist; 
Groupsdb gdb; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.groups); 

    Addgroup = (Button)findViewById(R.id.addgroup); 
    Delgroup = (Button)findViewById(R.id.deletegroup); 
    groupnames = (ListView)findViewById(R.id.listofgroups); 
    groupnames.setLongClickable(true); 

    gdb = new Groupsdb(this); 
    listItems = new ArrayList<String>(); 
    gdlist = new ArrayList<GroupsDetail>(); 

    gd = new GroupsDetail("Family"); 

    gdb.createGroup(gd); 
    gdlist = gdb.getallcontacts(); 

    for(GroupsDetail cn : gdlist){ 
     listItems.add(cn.getName()); 
    } 

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), R.layout.text, listItems); 
    groupnames.setAdapter(adapter); 

    } 

} 

//code of GroupDetails class 

    public class GroupsDetail { 

     private String Name; 
     private int id; 

public GroupsDetail(){} 

public GroupsDetail(String name){ 
    super(); 
    this.Name = name; 
} 

public GroupsDetail(String name, int i){ 
    super(); 
    this.Name = name; 
    this.id = i;  
} 

public int getId(){ 
    return id; 
} 

public void setId(int i){ 
    this.id = i; 
} 

public String getName(){ 
    return Name; 
} 

public void setName(String name){ 
    this.Name = name; 
} 

    public String toString(){ 
    return "Group [id = " + id + ", Name = "+ Name + "]"; 
     } 
} 
+0

Verwenden Sie 'db.insertWithOnConflict' anstelle von' db.insert' –

+0

Abhishek Patel können Sie mir bitte die Argumente für diese Methode sagen? Danke für die Hilfe !. –

+0

siehe http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html –

Antwort

0

Ich denke, Sie fügen mehrere Male ein. Wenn Sie nur einen Datensatz einfügen, gibt es nur einen Datensatz. Wenn Sie in der Nähe und die App wieder öffnet es zwei Datensätze gibt (Einfügen mehr) Ich habe angebracht Beispiel arbeite einmal https://www.dropbox.com/s/9v3ucmaccyvyztm/Sample_2.zip?dl=0

Erstellen Tisch wie

@Override 
    public void onCreate(SQLiteDatabase db) 
    { 

     String newTableQueryString = "create table " + 
       TABLE_groups + 
            " (" + 
            TABLE_ROW_ID + " integer primary key autoincrement not null," + 
            TABLE_ROW_ONE + " text, " + 
            "UNIQUE ("+TABLE_ROW_ONE+") ON CONFLICT REPLACE" + 
            ");"; 

     db.execSQL(newTableQueryString); 
    } 

und einfügen wie

public void createGroup(GroupsDetail gd){ 
     ContentValues values = new ContentValues(); 
     // put values in database 
     values.put("group_name" , gd.getName()); 
     db.insertWithOnConflict("groups", null, values, SQLiteDatabase.CONFLICT_REPLACE); 
     // close database transaction 
     db.close(); 
} 
Bitte überprüfen
Verwandte Themen