2014-03-26 9 views
0

다음 코드를 사용하여 데이터베이스의 목록보기를 표시하지만 목록에서 데이터가 반복되어 표시됩니다. Heres는 코드데이터가 목록에서 반복되는 경우

public class MainActivity extends Activity { 
private ListView gridView; 
public static ArrayList<String> ArrayofName = new ArrayList<String>(); 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    DatabaseHandler db = new DatabaseHandler(this); 

    /** 
    * CRUD Operations 
    * */ 
    // Inserting Contacts 
    Log.d("Insert: ", "Inserting .."); 
    db.addContact(new Contact("Ravi", "91")); 
    db.addContact(new Contact("Srinivas", "99")); 
    db.addContact(new Contact("Tommy", "95")); 
    db.addContact(new Contact("Karthik", "93")); 

    // Reading all contacts 
    Log.d("Reading: ", "Reading all contacts.."); 
    List<Contact> contacts = db.getAllContacts(); 

    for (Contact cn : contacts) { 
     String log = "Id: " + cn.getID() + " ,Name: " + cn.getName() 
       + " ,Phone: " + cn.getPhoneNumber(); 
     // Writing Contacts to log 
     Log.d("Name: ", log); 

    } 

    db.getAllContacts(); 

    gridView = (ListView) findViewById(R.id.gridView1); 

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
      android.R.layout.simple_list_item_1, ArrayofName); 

    gridView.setAdapter(adapter); 

    gridView.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View v, 
       int position, long id) { 
      Toast.makeText(getApplicationContext(), 
        ((TextView) v).getText(), Toast.LENGTH_SHORT).show(); 
     } 
    }); 
} 
    } 

을 Heres는 데이터를 반복하는 이유

public class DatabaseHandler extends SQLiteOpenHelper { 

private static final int DATABASE_VERSION = 1; 
private static final String DATABASE_NAME = "contactsManager"; 
private static final String TABLE_CONTACTS = "contacts"; 

// Contacts Table Columns names 
private static final String KEY_ID = "id"; 
private static final String KEY_NAME = "name"; 
private static final String KEY_PH_NO = "phone_number"; 

public DatabaseHandler(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
} 

// Creating Tables 
@Override 
public void onCreate(SQLiteDatabase db) { 
    String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "(" 
      + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT," 
      + KEY_PH_NO + " TEXT" + ")"; 
    db.execSQL(CREATE_CONTACTS_TABLE); 
} 

// Upgrading database 
@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS); 
    onCreate(db); 
} 

void addContact(Contact contact) { 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues values = new ContentValues(); 
    values.put(KEY_NAME, contact.getName()); // Contact Name 
    values.put(KEY_PH_NO, contact.getPhoneNumber()); // Contact Phone 
    db.insert(TABLE_CONTACTS, null, values); 
    db.close(); // Closing database connection 
} 

// Getting All Contacts 
public List<Contact> getAllContacts() { 
    List<Contact> contactList = new ArrayList<Contact>(); 
    // Select All Query 
    String selectQuery = "SELECT * FROM " + TABLE_CONTACTS; 

    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 

    // looping through all rows and adding to list 
    if (cursor.moveToFirst()) { 
     do { 
      Contact contact = new Contact(); 
      contact.setID(Integer.parseInt(cursor.getString(0))); 
      contact.setName(cursor.getString(1)); 
      contact.setPhoneNumber(cursor.getString(2)); 

      String name = cursor.getString(1) + "\n" + cursor.getString(2); 
      MainActivity.ArrayofName.add(name); 
      // Adding contact to list 
      contactList.add(contact); 
     } while (cursor.moveToNext()); 
    } 

    // return contact list 
    return contactList; 
} 

// Updating single contact 
public int updateContact(Contact contact) { 
    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 
    values.put(KEY_NAME, contact.getName()); 
    values.put(KEY_PH_NO, contact.getPhoneNumber()); 

    // updating row 
    return db.update(TABLE_CONTACTS, values, KEY_ID + " = ?", 
      new String[] { String.valueOf(contact.getID()) }); 
} 

// Deleting single contact 
public void deleteContact(Contact contact) { 
    SQLiteDatabase db = this.getWritableDatabase(); 
    db.delete(TABLE_CONTACTS, KEY_ID + " = ?", 
      new String[] { String.valueOf(contact.getID()) }); 
    db.close(); 
} 

// Getting contacts Count 
public int getContactsCount() { 
    String countQuery = "SELECT * FROM " + TABLE_CONTACTS; 
    SQLiteDatabase db = this.getReadableDatabase(); 
    Cursor cursor = db.rawQuery(countQuery, null); 
    cursor.close(); 

    // return count 
    return cursor.getCount(); 
} 

    } 

가 알려주세요 다른 클래스에게 있습니다. 보시다시피 단 4 개의 연락처가 추가되었지만 목록에는 약 4 개의 연락처가 40 개의 연락처로 표시됩니다.

답변

1

이 앱을 실행할 때마다 매번 값이 삽입되기 때문에. 그것이 반복되는 값을 얻는 이유입니다. 데이터베이스에 값을 삽입하기 전에 데이터베이스를 지우거나 공유 환경 설정을 사용하고 처음 실행시에만 데이터를 데이터베이스에 삽입하십시오.

+0

고마워요. 시도하고 결과를 말할 것인가? –

1

통해 UR 코드에서 다음과 같이 변경합니다 : Databasehandler.java에서

: & 메이크업 반환 유형 무효가 기능 getAllContacts의 변화를 (확인)를 따라

MainActivity.java에서 : 코멘트 다음 부분 .. :

// Reading all contacts 
Log.d("Reading: ", "Reading all contacts.."); 
List<Contact> contacts = db.getAllContacts(); 

for (Contact cn : contacts) { 
    String log = "Id: " + cn.getID() + " ,Name: " + cn.getName() 
      + " ,Phone: " + cn.getPhoneNumber(); 
    // Writing Contacts to log 
    Log.d("Name: ", log); 

} 
관련 문제