Android: как динамически загружать изображение с сервера по его имени из SQlite

Я новичок в android, и я столкнулся с проблемой при отображении изображения с сервера на основе его имени из Sqlite

То есть: я сохранил только имя изображения (текст) в базе данных SQLite (изображения имен столбцов), и я хочу загрузить изображения с сервера на основе имени образа sqlite, которое изображение должно отображать в представлении изображения

На сервере я создаю папку, такую ​​как «Автомобили» в этой папке, я храню изображения с именами автомобилей … но в sqlite я просто добавляю carname в текстовом формате с .jpeg

У меня есть два имени столбца в моей БД:

  • Сначала название автомобиля
  • Второй – Деталь автомобиля

Когда пользователь выбирает название автомобиля, в следующем действии пользователь может видеть детали автомобиля с изображениями. Здесь я отображаю детали, но я не знаю, как отображать изображения автомобилей с сервера

благодаря

Вот мой код:

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.detail_activity); detailtext= (TextView) findViewById(R.id.detail); imageView= (ImageView) findViewById(R.id.images); Intent intent= getIntent(); final String selectedData = intent.getStringExtra("selectedItem"); actionBar.setTitle(selectedData); dbHelper = new SqlLiteDbHelper(this); try { dbHelper.openDataBase(); } catch (SQLException e) { e.printStackTrace(); } sqLiteDatabase = dbHelper.getReadableDatabase(); cursor=dbHelper.getdetails(sqLiteDatabase, selectedData); if (cursor.moveToFirst()) { detailtext.setText(cursor.getString(0)); String imagename = cursor.getString(1); String imageUrl = "http://your_server/car/" + imagename ; Picasso.with(this).load(imageUrl).into(imageView ); } 

Примечание. Поле изображения – это 4-й столбец http://i.stack.imgur.com/lqvOQ.png, а на сервере я помещаю изображение на www.server.com/cars/carnames.jpg

В sqlite я просто вставляю имя изображения с .jpg ex: carnames.jpg

SqliteDbHelper

 public Cursor getdetails(SQLiteDatabase db,String img) { db=this.getReadableDatabase(); Cursor cursor; cursor=db.query("record",new String[]{DETAIL,IMAGES,ITEMNO + " as _id"},SUBCATEGORY + "='" +img+"'",null,null,null,null); return cursor; } 

Если вы хотите загружать изображения из SQlite, я предлагаю вам сохранить местоположение файла / файла, если данные хранятся локально, для показа одного изображения во всех изображениях это потому, что вы загружаете только одно изображение, вы можете захотеть Чтобы поместить все ваши идентификаторы в массив и передать его в db, запрос db также должен вернуть массив / arraylist местоположений изображений, которые вы должны загрузить в свои изображения, используя for loop например, у меня есть запрос, который загружает кучу Изображения из моей базы данных SQLite, это отображает изображения подкатегорий определенной категории с именем shoes, поэтому у нас есть изображения smart shoes , Casual shoes и многое другое. Я передаю идентификатор как параметр

  public ArrayList<CategoryItem> getAllSubCategories(int mtargetID) throws SQLException{ ArrayList<CategoryItem> myshoes = new ArrayList<>(); // Select All Query String sQuery = " SELECT "+Constant.CATEGORY_TB_ID+", "+Constant.SUB_DESCRIPTION+ ", "+Constant.SUB_IMAGEPATH+" FROM "+Constant.CATEGORY_TABLE+ " INNER JOIN "+Constant.SUB_CATEGORY_TABLE+" ON "+Constant.CATEGORY_TB_ID +" = " +Constant.SUB_CATEGORY_FK + " WHERE "+Constant.CATEGORY_TB_ID +" = ?"; String[] args = new String[1]; args[0] = String.valueOf(mtargetID); SQLiteDatabase db = this.getWritableDatabase(); Cursor cursor = db.rawQuery(sQuery, args); // looping through all rows and adding to list if (cursor.moveToFirst()) { do { CategoryItem myShoesItem = new CategoryItem(); //my shoe image path on external storage myShoeItem.setmCategoryImgPath(cursor.getString(2)); //i add my image paths to my array list myshoes.add(myShoeItem); } while (cursor.moveToNext()); } // return my arraylist for display into my imageview return mshoes; } 

На принимающей стороне я затем поперек через моего арайлиста

  for(int i = 0; i <getAllSubCategories.size(); i++ ) { imageView.setImageUri(getAllSubCategories.get(i).getmCategoryImgPath()) } 

С помощью этого метода вы установите изображения для всех ваших изображений.

У вас есть запрос «url» на сервер? как это:

Http: // server_ip / api / images? ImageName = "Название, которое вы видите здесь"

Затем вам нужно использовать некоторую библиотеку для загрузки изображения с сервера, см. Это:

Android Picasso

Итак, что-то вроде этого:

 Picasso.with(context).load("http://server_ip/api/images?imageName="The name you image here.png/jpeg").into(imageView); 

Вы говорите, что на вашем сервере вы создали каталог под названием cars/ и все изображения находятся в формате jpeg, а также с тем же именем файла, что и их настоящие имена. Если я прав, так что вы можете использовать коды ниже.

 Intent intent= getIntent(); final String selectedData = intent.getStringExtra("selectedItem"); actionBar.setTitle(selectedData); // This a image declared in XML for displaying car image ImageView carImageView = (ImageView) findViewById(R.id.carImage); // URL of this car's image String imageUrl = "http://your_server_address/cars/" + carName + ".jpeg"; // Use Picasso library to load that image Picasso.with(this).load(imageUrl).into(carImageView); 

Примечание. Picasso – это богатая богатыми библиотека для извлечения изображений из сети в Android.

Intereting Posts
Вызов метода может вызвать java NullpointerException Тема программы Преобразование Arraylist <Object> значение в байт Какую концепцию дизайна использовать для обновления пользовательского интерфейса async Загрузка больших изображений без OutOfMemoryError Библиотека поддержки android v 23.3.0 проблема с закусочной Утечка памяти класса ClassLoader Twilio Android Client – Как обновить токен способности для приема входящего вызова Android: получить элементы из массива строк и показать их один за другим в текстовом режиме Промежуточный прогресс не работает с ActionBarSherlock, работающим на Gingerbread Надуть вид в фоновом потоке Получение «Фатального сигнала 11 (SIGSEGV) при 0x00000010 (код = 1)» при записи в массив jfloat Нижняя панель кнопок в android Как отличить, если данный Контекстный объект является Контекстом Деятельности или Сервиса? Получить электронную почту facebook после входа в систему на Android