2011-09-29 5 views
0

현재 Android 응용 프로그램에서 작업 중입니다. 4 열의 텍스트 (그냥 응용 프로그램에서 문자열로 사용하는)를 저장하는 sqlite 데이터베이스가 있습니다. 테이블에서 모든 행과 열을 반환하려고합니다. 내가 만든 테이블에 데이터를 삽입하고 adb 쉘에서 sqlite3를 사용하여 거기에 있는지 확인했습니다. 내 프로그램에서 사용하는 것과 같은 문장을 사용하고 모든 올바른 데이터가있는 모든 행을 반환합니다. 내 프로그램에서는 커서를 반복하여 ArrayList<ArrayList<String>> 형식의 모든 데이터를 저장합니다. 행에 해당하는 올바른 번호 ArrayList<String>을 반환하지만 모두 마지막 행의 정보 만 가지고 있습니다. 여기 내 코드입니다 :응용 프로그램의 android sqlite 데이터베이스에서 모든 행을 선택하면 모든 항목의 마지막 항목이 반환됩니다

private static final String SELECT = "SELECT * FROM " + TABLE_NAME; 

public ArrayList<ArrayList<String>> allRecipes() 
{ 
    ArrayList<ArrayList<String>> results = new ArrayList<ArrayList<String>>(); 
    ArrayList<String> recipe = new ArrayList<String>(); 
    Cursor cursor = db.rawQuery(SELECT, null); 
    if(cursor.moveToFirst()) 
    { 
     do 
     { 
      recipe.clear(); 
      recipe.add(cursor.getString(1)); 
      recipe.add(cursor.getString(2)); 
      recipe.add(cursor.getString(3)); 
      recipe.add(cursor.getString(4)); 
      results.add(recipe); 
     }while(cursor.moveToNext()); 
     if(cursor != null && !cursor.isClosed()) 
      cursor.close(); 
    } 
    return results; 
} 

그때 내 프로그램의 다른 부분에 ArrayLists를 통해 반복하고 포함 된 모든 정보가 테이블에 입력 된 마지막 행의 단지 중복입니다. ArrayLists를받은 다른 메소드에서 ArrayLists를 확인한 결과 모두 같기 때문에 어떻게 든이 코드 세그먼트에서 문제가되어야한다고 가정하고 있습니다. 또한 group by 및 order by 절을 사용하여 select 문을 시도했지만 여전히 작동하지 않습니다. 올바른 매개 변수와 함께 db.query()를 사용하면 동일한 문제가 발생합니다.

답변

0

배열 목록에 래서 피에 대한 링크를 추가하고 주기적으로 모든 반복에서 래서 피 값을 변경하기 때문에 이런 일이 발생합니다.

당신이 하나

public ArrayList<ArrayList<String>> allRecipes() 
{ 
    ArrayList<ArrayList<String>> results = new ArrayList<ArrayList<String>>(); 
    Cursor cursor = db.rawQuery(SELECT, null); 
    if(cursor.moveToFirst()) 
    { 
     do 
     { 
      ArrayList<String> recipe = new ArrayList<String>(); 
      recipe.add(cursor.getString(1)); 
      recipe.add(cursor.getString(2)); 
      recipe.add(cursor.getString(3)); 
      recipe.add(cursor.getString(4)); 
      results.add(recipe); 
     }while(cursor.moveToNext()); 
     if(cursor != null && !cursor.isClosed()) 
      cursor.close(); 
    } 
    return results; 
} 
+1

에 코드를 변경해야합니다 그리고 그것은 더 나은 대신 배열 목록을 useing 클래스 레시피를 정의 할 –

관련 문제