Отобразить из БД текст и удаленное изображение

SQLite, Preferences, файлы, SD, Content Provider, XML, JSON
Ответить
meisron
Сообщения: 6
Зарегистрирован: 25 июл 2012, 12:43

Отобразить из БД текст и удаленное изображение

Сообщение meisron » 03 ноя 2012, 14:15

Как отобразить из БД текст и удаленное изображение?
В БД:
NAME text
IMG text
....
IMG - это url изображения

NoteList.java

Код: Выделить всё

import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.widget.BaseAdapter;
import android.widget.ListView;

public class SNoteList extends Activity {
	  ListView lvData;
	  DB db;
	  SimpleCursorAdapter scAdapter;
	  Cursor cursor;
	
	
	public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    	setContentView(R.layout.notelist);
     
        // открываем подключение к БД
        db = new DB(this);
        db.open();

        // получаем курсор
        cursor = db.getAllData();
        startManagingCursor(cursor);
        
        // формируем столбцы сопоставления
        String[] from = new String[] { DB.COLUMN_NAME, DB.COLUMN_IMG };
        int[] to = new int[] { R.id.n_name, R.id.n_img,};

        // создааем адаптер и настраиваем список
        scAdapter = new ImageCursorAdapter(this, R.layout.item, cursor, from, to);
        lvData = (ListView) findViewById(R.id.lvData);
        lvData.setAdapter(scAdapter);
...
	}
}
notelist.xml

Код: Выделить всё

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#ffffff"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/lvData"
        android:layout_height="wrap_content" >
    </ListView>

</LinearLayout>
item.xml

Код: Выделить всё

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="#ffffff"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/n_img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

    <TextView
        android:id="@+id/n_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=""
        android:textSize="12sp" />

</LinearLayout>
Вызываю из активити так:

Код: Выделить всё

private void showNotes() {
		Intent intent = new Intent(this, SNoteList.class);
		startActivity(intent);
	}
Нашел http://bit.ly/WiF7kx пример:

Код: Выделить всё

public void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.main);

	// managedQuery takes care of the lifecycle of the cursor.
	// it will close the cursor itself.
	// However, the use of managedQuery is discouraged and Loaders are now
	// the prefered way of loading data in activity. It is a topic for the
	// future.
	Cursor cursor = managedQuery(ClubCP.CONTENT_URI, null, null, null, null);

	// adapter to show the data. Go through android docs about SimpleCursorAdapter.
	SimpleCursorAdapter adapter = new SimpleCursorAdapter(
			getApplicationContext(), R.layout.club_row, cursor, UI_BINDING_FROM,
			UI_BINDING_TO);

	// We set the view binder for the adapter to our own CustomViewBinder.
	// The code for the custom view binder is below.
	adapter.setViewBinder(new CustomViewBinder());

	// Provides the cursor for the list view. The list view should be defined
	// in main.xml
	setListAdapter(adapter);
}

Код: Выделить всё

private class CustomViewBinder implements ViewBinder {

	@Override
	public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
		if (columnIndex == cursor.getColumnIndex(ClubCP.KEY_IS_STAR)) {
			// If the column is IS_STAR then we use custom view.
			int is_star = cursor.getInt(columnIndex);
			if (is_star != 1) {
				// set the visibility of the view to GONE
				view.setVisibility(View.GONE);
			}
			return true;
		}
		// For others, we simply return false so that the default binding
		// happens.
		return false;
	}

}
но он не подходит...

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Отобразить из БД текст и удаленное изображение

Сообщение rezak90 » 03 ноя 2012, 15:21

Как отобразить из БД текст и удаленное изображение?
1. Вы же получаете данные в курсор и отображаете текст в своём списке. Или не работает, я что то не понял.
2. Изображение по url можно отобразить например не в ImageView а в WebView заключив url в html. Или можно загрузить картинку в ImageView:

Код: Выделить всё

iv.setImageBitmap(BitmapFactory.decodeStream(new URL("your url").openConnection().getInputStream()));
З.Ы. только такой код выполняйте в отдельном потоке.
R.id.team
Политика на форуме запрещена

meisron
Сообщения: 6
Зарегистрирован: 25 июл 2012, 12:43

Re: Отобразить из БД текст и удаленное изображение

Сообщение meisron » 03 ноя 2012, 16:06

rezak90 писал(а): 1. Вы же получаете данные в курсор и отображаете текст в своём списке. Или не работает, я что то не понял.
Отображаю текст. Хотелось бы и текст и изображение
rezak90 писал(а): 2. Изображение по url можно отобразить например не в ImageView а в WebView заключив url в html. Или можно загрузить картинку в ImageView:

Код: Выделить всё

iv.setImageBitmap(BitmapFactory.decodeStream(new URL("your url").openConnection().getInputStream()));
Хорошо, вопрос в том, как это сделать с учетом данного выше кода. Например

Код: Выделить всё

// формируем столбцы сопоставления
        String[] from = new String[] { DB.COLUMN_NAME, DB.COLUMN_IMG };
        int[] to = new int[] { R.id.n_name, R.id.n_img,};
Что делать дальше?как впихнуть

Код: Выделить всё

iv.setImageBitmap(BitmapFactory.decodeStream(new URL("your url").openConnection().getInputStream()));

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Отобразить из БД текст и удаленное изображение

Сообщение rezak90 » 03 ноя 2012, 16:11

та просто, написать кастомный адаптер
R.id.team
Политика на форуме запрещена

meisron
Сообщения: 6
Зарегистрирован: 25 июл 2012, 12:43

Re: Отобразить из БД текст и удаленное изображение

Сообщение meisron » 03 ноя 2012, 16:15

Могу предположить, что после указать

Код: Выделить всё

......
adapter.setViewBinder(new CustomViewBinder());
        setListAdapter(adapter);
А в CustomViewBinder

Код: Выделить всё

private class CustomViewBinder implements ViewBinder {
public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
//меняю на DB.COLUMN_IMG
if (columnIndex == cursor.getColumnIndex(DB.COLUMN_IMG)) {
ImageView iv = (ImageView) findViewById(R.id.n_img);
iv.setImageBitmap(BitmapFactory.decodeStream(new URL("Как получить URL????").openConnection().getInputStream()));
return true;
}
return false;
}
}

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Отобразить из БД текст и удаленное изображение

Сообщение rezak90 » 03 ноя 2012, 16:20

правильно, только нужно кастить вьюшки от view который передаётся в setViewValue:

Код: Выделить всё

ImageView iv = (ImageView) view.findViewById(R.id.n_img);
Если не ошибаюсь. Если не получится то тогда нужно делать инфлатер.
R.id.team
Политика на форуме запрещена

meisron
Сообщения: 6
Зарегистрирован: 25 июл 2012, 12:43

Re: Отобразить из БД текст и удаленное изображение

Сообщение meisron » 03 ноя 2012, 16:26

А как все-таки получить URL в

Код: Выделить всё

iv.setImageBitmap(BitmapFactory.decodeStream(new URL("your url").openConnection().getInputStream()));

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Отобразить из БД текст и удаленное изображение

Сообщение rezak90 » 03 ноя 2012, 16:53

ну вам же курсор передаётся, вот с него и вытяните урл
R.id.team
Политика на форуме запрещена

Ответить