2010-07-09 6 views
0

나는 사용자에게 문자열을 표시하는 안드로이드 응용 프로그램에서 작업 중이므로 사용자는 즐겨 찾기 목록에 하나를 추가 할 수있는 옵션이 있습니다. 나는 수색하고 찾았으며 이것을하는 적절한 방법을 찾을 수 없다. 나는 하나의 오픈 소스 프로젝트를 만들었고, 사용자가 좋아하는 것을 제거 할 때까지 모든 것이 작동했다. 데이터베이스는 데이터 행을 지우지 만 새 행이 추가되면 삭제 된 행에 여전히 데이터가있는 것처럼 동작하여 즐겨 찾기 목록에 공백을 남겨 둡니다. ArrayList 저장 SQLiteDatabase에 <String> 상태 (안드로이드)

내 삽입 방법이다

public long insertString(String newString) 
    { 
    ContentValues newStringValue = new ContentValues(); 

    newStringValue.put(KEY_STRING, newString); 

    return db.insert(DATABASE_TABLE, null, newStringValue); 
    } 

긴 항상 내가 제거 방법을 사용하는 경우에도 증가합니다 반환 : 내가 세 번째 인덱스를 제거하려고하면

public boolean removeString(long _rowIndex) 
    { 
    return db.delete(DATABASE_TABLE, KEY_ID + "=" + _rowIndex, null) > 0; 
    } 

을, 사용자 제거 세 번째 인덱스에서 질문은 메서드가 false를 반환합니다. 데이터가없는 모든 행을 완전히 제거하는 방법이 있습니까?

답변

0

CursorAdapter 또는를 사용해야하며 데이터를 수정할 때 cursor.requery()을 호출하여 모든 항목을 새로 고칩니다.

+0

감사합니다. –

0

문자열 목록을 JSON과 같이 인코딩 한 다음 긴 문자열 (BLOB/CLOB)로 저장 하시겠습니까? Jackson JSON processor을 사용 하겠지만, XML을 선호하는 경우 Guice 나 XStream 중에서 선택할 수있는 여러 가지 방법이 있습니다. 내 말은, 당신이 정말로 데이터의 관계형 측면을 필요로하지 않는다는 것 (쿼리를 통해 특정 목록 엔트리를 가진 사용자를 찾을 필요가 없다)을 가정하고 단지 목록을 유지할 필요가 있다고 가정한다.

0
public static class OrderManager 

{ 

private MyDBOpenHelper _db_Orders; 

private static final String GET_Orders = “SELECT * FROM “+Order_TABLE_NAME ; 


public OrderManager(Context context) 

{ 

_db_Orders = new MyDBOpenHelper(context); 

} 


public boolean insert(String orderName, String orderStatus) 

{ 

try 

{ 

SQLiteDatabase sqlite = _db_Orders.getWritableDatabase(); 

/* 

sqlite.execSQL(“INSERT INTO “+ Order_TABLE_NAME + 

” (” + KEY_NAME +”, “+ KEY_STATUS + “)” + 

” VALUES (‘” + orderName + “‘, ‘” + orderStatus + “‘)”); 

*/ 


ContentValues initialValues = new ContentValues(); 

initialValues.put(KEY_NAME, orderName); 

initialValues.put(KEY_STATUS, orderStatus); 

sqlite.insert(Order_TABLE_NAME, null, initialValues); 


} 

catch(SQLException sqlerror) 

{ 

Log.v(“Insert ERROR”, sqlerror.getMessage()); 

return false; 

} 


return true; 

} 


public ArrayList<Order> getOrders() 

{ 

ArrayList<Order> orders = new ArrayList<Order>(); 


SQLiteDatabase sqliteDB = _db_Orders.getReadableDatabase(); 

Cursor crsr = sqliteDB.rawQuery(GET_Orders, null); 


Log.v(“Select Query result”, String.valueOf(crsr.getCount())); 


crsr.moveToFirst(); 

for(int i=0; i < crsr.getCount(); i++) 

{ 

orders.add(new Order(crsr.getString(0), crsr.getString(1))); 

//Log.v(“DATA”, crsr.getString(0) + ” ” +crsr.getString(1)); 

crsr.moveToNext(); 

} 


return orders; 

} 

} 
관련 문제