2015-05-20 3 views
1

Я код, который извлекает теги из базы данных:Как преобразовать результаты из базы данных в одну строку?

public void fetchTags() { 
     ContentResolver contentResolver = this.getContentResolver(); 
     Cursor cursor = contentResolver.query(TagsContentProvider.CONTENT_URI, 
       new String[]{Tags.COLUMN_TNAME}, null, null, null); 
     cursor.getCount(); 
     while(cursor.moveToNext()) { 
      System.out.println(cursor.getString(cursor.getColumnIndex(Tags.COLUMN_TNAME)));   
     } 
     cursor.close();   
    } 

Выход:

enter image description here

Как я могу превратить результаты в одной строке, где символы разделены запятой?

ответ

1

Используйте StringBuilder:

// ... 

final String SEPARATOR = ", "; 

StringBuilder builder = new StringBuilder(); 
String prefix = ""; 

while(cursor.moveToNext()) { 
    builder.append(prefix); 
    prefix = SEPARATOR; 
    builder.append(cursor.getString(cursor.getColumnIndex(Tags.COLUMN_TNAME)));  
} 

String output = builder.toString() 

// ... 

StringBuilder позволяет сцепить String s быстрее, что нормальный outputString += inputString будет делать. Это связано с тем, что объекты String неизменяемы, а StringBuilder - нет. Если вы хотите узнать больше об этом, посмотрите, например. на this article.

Edit: Чтобы вернуть созданную строку в вызывающем методе, ваш метод fetchTags() должен быть определен следующим образом:

public String fetchTags() { 

    // your code 

    return output; 

} 

Вы определили его с возвращаемым типом void: public void fetchTags() { ... }. Это не позволит вам вернуть какие-либо значения.

Полный метод fetchTags() должен выглядеть следующим образом:

public String fetchTags() { 
    ContentResolver contentResolver = this.getContentResolver(); 
    Cursor cursor = contentResolver.query(TagsContentProvider.CONTENT_URI, 
     new String[] { 
      Tags.COLUMN_TNAME 
     }, null, null, null); 
    cursor.getCount(); 

    final String SEPARATOR = ", "; 

    StringBuilder builder = new StringBuilder(); 
    String prefix = ""; 

    while (cursor.moveToNext()) { 
     builder.append(prefix); 
     prefix = SEPARATOR; 
     builder.append(cursor.getString(cursor.getColumnIndex(Tags.COLUMN_TNAME))); 
    } 

    String output = builder.toString() 

    cursor.close(); 

    return output; 
} 
+0

Спасибо :) Значит, вывод я получаю из него не считается строкой? Но я также хочу использовать его как одну строку в другом классе, возможно ли это? –

+0

Да, конечно. 'String output = builder.toString()' будет записывать содержимое как обычный 'String' в' output'. Вы можете использовать это как любой другой 'String'. – Timo

+0

Но вне этого метода в другом, он не признает «строителя» правильно? Как и у меня есть строка «mSearchTerm», в другом методе я хотел, чтобы выход fetchTags() был этой строкой, как мне следует называть fetchTags()? –

1

Вы могли бы аккумулировать результаты в StringBuilder перед печатью:

StringBuilder builder = new StringBuilder(); 

// Special cases: empty cursor and cursor with a single result 
if (cursor.moveToNext()) { 
    builder.append(cursor.getString(cursor.getColumnIndex(Tags.COLUMN_TNAME))); 
} 

// Other cases 
while(cursor.moveToNext()) { 
    builder.append(',') 
      .append(cursor.getString(cursor.getColumnIndex(Tags.COLUMN_TNAME))); 
} 

System.out.println(builder); 
Смежные вопросы