Search the Community
Showing results for tags 'json'.
-
Version 9.8.0
Установка очень простая, всего 1 минуту -> смотреть видео Напоминаем Вам о полной совместимости с модулем Комбинации Опций Важно! Обращаем Ваше внимание, что после покупки данного модуля он будет работать бессрочно и без дополнительной оплаты (за исключением случаев платных доработок, согласованных с Клиентом). Однако, расширенная техническая поддержка и возможность обновления модуля будут доступны только на протяжении ТРЕХ МЕСЯЦЕВ с момента покупки! Так же обращаем Ваше внимание, что в стоимость дополнительной услуги по установке модуля на сайте, НЕ ВХОДИТ адаптация модуля под не стандартные темы, а так же под собственные доработки пользователями кода CMS! Новое видео - ответы и комментарии на частые вопросы СМОТРИТЕ ПРЯМО СЕЙЧАС Самый полный и безопасный инструмент импорта/экспорта для Opencart Идеальный инструмент «все в одном», чтобы позаботиться обо всех ваших потребностях в импорте/экспорте данных для вашего магазина, будь то управление вашими собственными данными или синхронизация из файлов или каналов от ваших постоянных поставщиков. Работает с Opencart и OCStore (1.5.x, 2.x & 3.x), Mijoshop и Joocart. Мы слушаем наших клиентов! Import / Export PRO - это результат долгой работы с момента запуска в 2014 году, на основании пожеланий наших клиентов. Мы создали самое безопасное, мощное и адаптируемое решение для удовлетворения самых взыскательных потребностей. Предлагаем Вам прочесть отзывы наших клиентов об Import / Export Pro. Мы здесь, чтобы помочь! Перед покупкой обязательно ознакомьтесь с разделом часто задаваемых вопросов . Если Вы не нашли ответа на свой вопрос, не стесняйтесь писать нам ! Если у Вас нет времени или возможности для самостоятельной настройки модуля, мы можем сделать эту работу за Вас на высоком профессиональном уровне. Пожалуйста отправьте нам запрос чтобы уточнить стоимость! Все, что нужно для импорта или экспорта! Товары, акции, скидки, изображения товаров, атрибуты товаров, категории, группы атрибутов, параметры, значения параметров, производители, группы фильтров, Фильтры, группы клиентов, Клиенты, адреса, заказы, заказы на продукты, итоги заказов, купоны и так далее. Ваши данные всегда в безопасности! В случае какого-либо сбоя в процессе импорта, наша система автоматически восстановит данные в исходное положение. Все сообщения в процессе работы, в том числе и ошибочные, отображаются на активной панели. Связь с поставщиками! Модуль совместим с большинством форматов файлов, предоставляемых поставщиками. Механизм включения и отключения колонок, включенный в модуль, позволяет гибко обрабатывать файлы, отправленные вашим поставщиком, и решать любые проблемы. Кроме того, Вы можете экспортировать данные в формате, необходимом для других платформ, если это необходимо. Модуль идеально подходит для YML (Yandex) и многих других форматов от известных или независимых площадок. Импорт и экспорт без ограничений! Мы оптимизировали процесс импорта и экспорта, в результате чего, модуль использует минимально возможное количество ресурсов Вашего сервера, для обработки больших объемов данных. У Вас также есть возможность запускать профили импорта / экспорта по расписанию, используя CRON, в автоматическом режиме, во время наименьшей загрузки на сервер. Планировщик CRON Вам может потребоваться автоматически начать экспорт или импорт профилей в удобное для вас время. Мы разработали плагин, который позволяет запускать профили импорта или экспорта в планировщике CRON. Идеально подходит для синхронизации с поставщиками, управления запасами, ценообразования и многого другого. Возможности фильтрации! Более 500 фильтров на выбор, чтобы применить к вашим профилям, комбинации почти бесконечны! Импорт и экспорт в любом месте! Передача данных на Ваш компьютер или с него, из электронных таблиц Google, с внешнего сервера, через FTP или пользовательские URL-адреса. Вы будете иметь полный контроль и гибкость ввода и вывода данных. Электронные таблицы Google - XLSX - CSV - ODS - XML! Система импорта / экспорта полностью совместима с электронными таблицами Google, что означает, что вы можете отправлять данные из своего магазина в документ, хранящийся в вашей учетной записи Google Диска (для экспорта данных), и собирать данные из электронных таблиц, загружая их в свой магазин (для импорта данных). Другие поддерживаемые форматы: XLSX, CSV, ODS, XML. Миграция между разными версиями Opencart! Миграция всех данных между различными версиями Opencart происходит почти мгновенно. Расширенная система миграции подготовит файл для выбранной целевой версии. Вы также можете выбрать данные, специфичные для миграции (продукты, клиенты, заказы, категории). Произвольные поля (дополнение) У вас есть другие плагины, которые добавляют пользовательские поля для разных моделей (продукты, категории, клиенты, заказы, параметры и т. д.)? Мы разработали систему для добавления пользовательских записей из нативной базы данных в процессы импорта, экспорта и миграции! Обращаем Ваше внимание, что обработка новых полей производится только из таблиц базы данных, которые созданы в Opencart по умолчанию! Видеоинструкции! Можем Вас заверить, что изучение Import Export PRO будет проще простого! Кроме текстовой документации, мы предлагаем серию простых видеоуроков на разных языках, которые помогут вам начать использовать разработанный инструмент независимо от уровня вашего опыта. Кое что еще! Автоматический генератор SEO URL, выбор идентификаторов товаров для импорта, пропуск существующих товаров в импорте, исключение товаров, которых нет в импорте, полное резервное копирование вашего магазина и многое другое! Отличная поддержка За более чем 10 лет работы с Opencart, тысячи клиентов остались довольны нашими услугами. DevmanExtensions является одной из самых уважаемых компаний на рынке дополнений для Opencart. Наслаждайтесь лучшей поддержкой, все проблемы будут решены менее чем за 24 часа! Пример выполнения операции импорта Пример выполнения операции экспорта Вы сами выбираете источники для импорта данных! Вы сами выбираете куда сохранить файл экспорта! Уникальная миграция данных между версиями Opencart! Расширенные фильтры! Сделайте работу с поставщиками удобной! Планировщик CRON! Произвольные поля (дополнение приобретается отдельно - $ 29.99)! Если вам нужно добавить свою собственную расширенную информацию, например, о продуктах, клиентах, заказах или моделях, то для этого случая мы предоставили дополнительные функции для пользовательских столбцов, которые могут быть добавлены в файл импорта или экспорта. Обращаем Ваше внимание, что обработка новых полей производится только из таблиц базы данных, которые созданы в Opencart по умолчанию!$45- 74 reviews
-
- 8
-
- export
- import excel
- (and 22 more)
-
45 Download / Buy Import/Export Pro - XLSX -XLS - CSV - XML - JSON - Google Spreadsheets Установка очень простая, всего 1 минуту -> смотреть видео Напоминаем Вам о полной совместимости с модулем Комбинации Опций Важно! Обращаем Ваше внимание, что после покупки данного модуля он будет работать бессрочно и без дополнительной оплаты (за исключением случаев платных доработок, согласованных с Клиентом). Однако, расширенная техническая поддержка и возможность обновления модуля будут доступны только на протяжении ТРЕХ МЕСЯЦЕВ с момента покупки! Так же обращаем Ваше внимание, что в стоимость дополнительной услуги по установке модуля на сайте, НЕ ВХОДИТ адаптация модуля под не стандартные темы, а так же под собственные доработки пользователями кода CMS! Новое видео - ответы и комментарии на частые вопросы СМОТРИТЕ ПРЯМО СЕЙЧАС Самый полный и безопасный инструмент импорта/экспорта для Opencart Идеальный инструмент «все в одном», чтобы позаботиться обо всех ваших потребностях в импорте/экспорте данных для вашего магазина, будь то управление вашими собственными данными или синхронизация из файлов или каналов от ваших постоянных поставщиков. Работает с Opencart и OCStore (1.5.x, 2.x & 3.x), Mijoshop и Joocart. Мы слушаем наших клиентов! Import / Export PRO - это результат долгой работы с момента запуска в 2014 году, на основании пожеланий наших клиентов. Мы создали самое безопасное, мощное и адаптируемое решение для удовлетворения самых взыскательных потребностей. Предлагаем Вам прочесть отзывы наших клиентов об Import / Export Pro. Мы здесь, чтобы помочь! Перед покупкой обязательно ознакомьтесь с разделом часто задаваемых вопросов . Если Вы не нашли ответа на свой вопрос, не стесняйтесь писать нам ! Если у Вас нет времени или возможности для самостоятельной настройки модуля, мы можем сделать эту работу за Вас на высоком профессиональном уровне. Пожалуйста отправьте нам запрос чтобы уточнить стоимость! Все, что нужно для импорта или экспорта! Товары, акции, скидки, изображения товаров, атрибуты товаров, категории, группы атрибутов, параметры, значения параметров, производители, группы фильтров, Фильтры, группы клиентов, Клиенты, адреса, заказы, заказы на продукты, итоги заказов, купоны и так далее. Ваши данные всегда в безопасности! В случае какого-либо сбоя в процессе импорта, наша система автоматически восстановит данные в исходное положение. Все сообщения в процессе работы, в том числе и ошибочные, отображаются на активной панели. Связь с поставщиками! Модуль совместим с большинством форматов файлов, предоставляемых поставщиками. Механизм включения и отключения колонок, включенный в модуль, позволяет гибко обрабатывать файлы, отправленные вашим поставщиком, и решать любые проблемы. Кроме того, Вы можете экспортировать данные в формате, необходимом для других платформ, если это необходимо. Модуль идеально подходит для YML (Yandex) и многих других форматов от известных или независимых площадок. Импорт и экспорт без ограничений! Мы оптимизировали процесс импорта и экспорта, в результате чего, модуль использует минимально возможное количество ресурсов Вашего сервера, для обработки больших объемов данных. У Вас также есть возможность запускать профили импорта / экспорта по расписанию, используя CRON, в автоматическом режиме, во время наименьшей загрузки на сервер. Планировщик CRON Вам может потребоваться автоматически начать экспорт или импорт профилей в удобное для вас время. Мы разработали плагин, который позволяет запускать профили импорта или экспорта в планировщике CRON. Идеально подходит для синхронизации с поставщиками, управления запасами, ценообразования и многого другого. Возможности фильтрации! Более 500 фильтров на выбор, чтобы применить к вашим профилям, комбинации почти бесконечны! Импорт и экспорт в любом месте! Передача данных на Ваш компьютер или с него, из электронных таблиц Google, с внешнего сервера, через FTP или пользовательские URL-адреса. Вы будете иметь полный контроль и гибкость ввода и вывода данных. Электронные таблицы Google - XLSX - CSV - ODS - XML! Система импорта / экспорта полностью совместима с электронными таблицами Google, что означает, что вы можете отправлять данные из своего магазина в документ, хранящийся в вашей учетной записи Google Диска (для экспорта данных), и собирать данные из электронных таблиц, загружая их в свой магазин (для импорта данных). Другие поддерживаемые форматы: XLSX, CSV, ODS, XML. Миграция между разными версиями Opencart! Миграция всех данных между различными версиями Opencart происходит почти мгновенно. Расширенная система миграции подготовит файл для выбранной целевой версии. Вы также можете выбрать данные, специфичные для миграции (продукты, клиенты, заказы, категории). Произвольные поля (дополнение) У вас есть другие плагины, которые добавляют пользовательские поля для разных моделей (продукты, категории, клиенты, заказы, параметры и т. д.)? Мы разработали систему для добавления пользовательских записей из нативной базы данных в процессы импорта, экспорта и миграции! Обращаем Ваше внимание, что обработка новых полей производится только из таблиц базы данных, которые созданы в Opencart по умолчанию! Видеоинструкции! Можем Вас заверить, что изучение Import Export PRO будет проще простого! Кроме текстовой документации, мы предлагаем серию простых видеоуроков на разных языках, которые помогут вам начать использовать разработанный инструмент независимо от уровня вашего опыта. Кое что еще! Автоматический генератор SEO URL, выбор идентификаторов товаров для импорта, пропуск существующих товаров в импорте, исключение товаров, которых нет в импорте, полное резервное копирование вашего магазина и многое другое! Отличная поддержка За более чем 10 лет работы с Opencart, тысячи клиентов остались довольны нашими услугами. DevmanExtensions является одной из самых уважаемых компаний на рынке дополнений для Opencart. Наслаждайтесь лучшей поддержкой, все проблемы будут решены менее чем за 24 часа! Пример выполнения операции импорта Пример выполнения операции экспорта Вы сами выбираете источники для импорта данных! Вы сами выбираете куда сохранить файл экспорта! Уникальная миграция данных между версиями Opencart! Расширенные фильтры! Сделайте работу с поставщиками удобной! Планировщик CRON! Произвольные поля (дополнение приобретается отдельно - $ 29.99)! Если вам нужно добавить свою собственную расширенную информацию, например, о продуктах, клиентах, заказах или моделях, то для этого случая мы предоставили дополнительные функции для пользовательских столбцов, которые могут быть добавлены в файл импорта или экспорта. Обращаем Ваше внимание, что обработка новых полей производится только из таблиц базы данных, которые созданы в Opencart по умолчанию! Submitter DevmanExtensions Submitted 07/06/2018 Category Обмен данными Ioncube Loader Нет ocStore 3.0 2.3.0.2.4 2.3 2.2 2.1 1.5.5.1.2 1.5.5.1.1 1.5.5.1 1.5.4.1.2 1.5.4.1.1 1.5.4.1 OpenCart.Pro, ocShop Opencart.pro 2.3 Opencart.pro 2.1 OcShop 2.0.3.х OcShop 1.5.6.4.х Get request to server of developer Да
- 960 replies
-
- 1
-
- export
- import excel
- (and 22 more)
-
Приветствую форумчане. Такая проблема, пытаюсь выполнить ajax запрос, суть которого отправить некоторые данные с домена: a.com на b.com и соответственно получить ответ от b.com с целью дальнейшей его обработки в скрипте на a.com Оба домена находятся на OpenServer на локальной машине, то есть у меня есть контроль над http://b.com/ и я могу прописать в php файле необходимые настройки. Однако при попытке выполнить ajax запрос получаю ошибку: jquery-3.6.0.min.js:2 Cross-Origin Read Blocking (CORB) blocked cross-origin response http://b.com/?callback=jQuery360001053556176974424_1630579545897&_=1630579545898 with MIME type application/json. See https://www.chromestatus.com/feature/5629709824032768 for more details. Аналогичную ситуацию имею на хостинге уже на реальных доменах. При этом данные c a.com на b.com в php скрипт все же попадают, однако, мне не удается добиться чтения ответа на домене a.com. Что характерно в сети есть по меньшей мере один домен с которого таки удается получить данные таким способом. Если вместо b.com подставить страницу: https://jsonplaceholder.typicode.com/todos/1 то в этом случае получаю ответ: {userId: 1, id: 1, title: "delectus aut autem", completed: false} Однако же добиться аналогичного эффекта на домене под собственным контролем я не могу. Пробовал в js указывать crossDomain: true, на стороне php пробовал указывать различные заголовки по типу: header('content-type: application/json'); и тому подобное... пробовал даже скопировать из браузера заголовки которые отдает сайт https://jsonplaceholder.typicode.com/todos/1 и подставить их в php файл через тот же header() однако ничего не выходит. Подскажите куда копать? Вопрос вроде плевый, но сколько не пытаюсь ничего не получается. Ниже код js: <script> //Первый вариант на jQuery: $(document).ready(function(){ $.ajax({ url: "http://b.com", crossDomain: true, dataType: "jsonp", success: function( response ) { console.log(response); } }); }); </script> <script> //Второй вариант на чистом js: function receiver(data){ console.log(data); } </script> <script src="http://b.com/?callback=receiver"></script> код php: <?php header('content-type: application/json'); header('Access-Control-Allow-Origin: http://a.com'); header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE'); echo '{"foo":"bar"}'; ?>
- 3 replies
-
- php
- openserver
-
(and 3 more)
Tagged with:
-
Как передать в $json['success'] количество товара и цену товара, пробовал сделать аналогично полю $json['total'], вываливается ошибка. Чтобы при кнопке купить примерно такое появлялось.
-
Opencart - Android - JSON - получаем список товаров в приложении
ocdroid posted a blog entry in ocdroid blog
Всем привет! Сегодня мы разберем получение товаров из категории Opencart в Android-приложение через JSON. Для начала не будем использовать сторонние библиотеки, а сделаем все нативным образом, чтобы ознакомиться с базовыми принципами обмена данными. Итак, поехали Сперва нужно определить выдачу массива товаров в JSON-объект из магазина. Открываем catalog/controller/product/category.php И в цикле выдачи данных для товаров добавляем свои запросы. Перед $data['products'][] = array( Добавляем // изображение для списка, размер 100х100 if ($result['image']) { $json_image = $this->model_tool_image->resize($result['image'], 100, 100); } else { $json_image = $this->model_tool_image->resize('placeholder.png', 100, 100); } // создаем массив данных для каждого товара // получаем имя, путь изображения, описание и цену $data['json-products'][] = array( 'name' => $result['name'], 'thumb' => $json_image, 'description' => utf8_substr(trim(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8'))), 0, $this->config->get('theme_' . $this->config->get('config_theme') . '_product_description_length')) . '..', 'price' => $price, ); Дальше ищем response $this->response->setOutput($this->load->view('product/category', $data)); И заменяем на // формируем массив products $data['json_products'] = array( 'products' => $data['json-products'], ); // и отдаем его в json при запросе в адресной строке &json_products // для этого поставим условие запроса if (isset( $this->request->get['json_products'])) { $this->response->setOutput(json_encode($data['json_products'])); } else { $this->response->setOutput($this->load->view('product/category', $data)); } Таким образом, теперь при запросе к сайту по адресу мой-сайт/index.php?route=product/category&path=20&json_products мы будем получать массив данных вида: {"products":[ {"name":"Apple Cinema30'", "thumb":"http:\/\/store.url\/image\/cache\/catalog\/demo\/apple_cinema_30-100x100.jpg", "description":"The 30-inch Apple Cinema HD Display delivers an amazing 2560 x 1600 pixel resolution. Designed speci..", "price":"$100.00"}, {"name":"Canon EOS 5D", "thumb":"http:\/\/store.url\/image\/cache\/catalog\/demo\/canon_eos_5d_1-100x100.jpg", "description":"Canon's press material for the EOS 5D states that it 'defines (a) new D-SLR category', while we're n..", "price":"$100.00"}, . . . , . . . , ]} С серверной частью закончили, переходим к программной части приложения. Что мы будем делать? Получим JSON данные из url Разберем эти данные и актуализируем с listView(textView) Скачаем картинки, кешируем их в приложении и актуализируем по позициям в listView(imageView) Для начала не забудьте дать приложению разрешение на использование сети (в манифесте): <uses-permission android:name="android.permission.INTERNET"/> Также в папку res/drawable мы поместим заглушку для изображений(до того, как они спарсятся) blank.png (100x100px) Теперь разметка. Для простоты будем работать с activity_main и стандартным listView activity_main.xml: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <ListView android:id="@+id/lv_products" android:layout_width="wrap_content" android:layout_height="wrap_content" tools:context=".MainActivity" /> </RelativeLayout> Здесь все просто - в релятивную разметку мы поместили listView c id=lv_products Теперь создадим кастомную разметку для этого listView lv_layout.xml: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:id="@+id/tv_product" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:layout_marginRight="5dp" android:layout_marginTop="5dp" android:textColor="#195F74" android:textSize="20sp" android:textStyle="bold" /> <ImageView android:id="@+id/iv_thumb" android:layout_width="100dp" android:layout_height="100dp" android:layout_below="@id/tv_product" android:layout_centerVertical="true" android:contentDescription="@string/str_iv_thumb" android:padding="5dp" android:scaleType="fitXY" /> <TextView android:id="@+id/tv_description" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/tv_product" android:layout_toRightOf="@id/iv_thumb" android:textSize="16sp" /> <TextView android:id="@+id/tv_price" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/tv_description" android:layout_marginBottom="10dp" android:gravity="right" android:layout_marginRight="5dp" android:textColor="#cc3333" android:textSize="20sp" android:textStyle="bold"/> </RelativeLayout> С разметкой закончили — приступаем к коду Создаем файл ProductsJSONParser.java (это и будет класс парсера) package com.opencart.ocproducstlist; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.content.res.Resources; /** класс парсера JSON данных */ public class ProductsJSONParser { // Получаем JSONObject и возвращаем List public List<HashMap<String, Object>> parse(JSONObject jObject) { JSONArray jProducts = null; try { // Здесь элементы из массива 'products', который мы получаем из контроллера jProducts = jObject.getJSONArray("products"); } catch (JSONException e) { e.printStackTrace(); } // применяем getProducts к массиву объекта JSON // теперь каждый объект - это товар return getProducts(jProducts); } private List<HashMap<String, Object>> getProducts(JSONArray jProducts) { int productCount = jProducts.length(); List<HashMap<String, Object>> productList = new ArrayList<HashMap<String, Object>>(); HashMap<String, Object> product = null; // разбираем товары по одному и добавляем к объекту List for (int i = 0; i < productCount; i++) { try { // вызываем getProduct и парсим, добавляем product = getProduct((JSONObject) jProducts.get(i)); productList.add(product); } catch (JSONException e) { e.printStackTrace(); } } return productList; } // Разбираем JSON-объект product private HashMap<String, Object> getProduct(JSONObject jProduct) { HashMap<String, Object> product = new HashMap<String, Object>(); String name = ""; String thumb = ""; String description = ""; String price = ""; try { // обратите внимание на метод .replaceAll // без него разные "непечатные" символы будут отображаться неправильно name = jProduct.getString("name").replaceAll(""", "\""); thumb = jProduct.getString("thumb"); description = jProduct.getString("description").replaceAll(""", "\"").replaceAll("’", "\'"); price = jProduct.getString("price"); product.put("product", name); // здесь сперва ставим заглушку product.put("thumb", R.drawable.blank); product.put("thumb_path", thumb); product.put("description", description); product.put("price", price); } catch (JSONException e) { e.printStackTrace(); } return product; } } Ну а теперь MainActivity package com.opencart.ocproducstlist; import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.util.HashMap; import java.util.List; import org.json.JSONObject; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.widget.ListView; import android.widget.SimpleAdapter; public class MainActivity extends Activity { ListView mListView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // URL с нашими JSON-данными String strUrl = "http://мойсайт.com/index.php?route=product/category&path=20&json_products"; // определяем задачу по загрузке // и запускаем ее с нашим url DownloadTask downloadTask = new DownloadTask(); downloadTask.execute(strUrl); // ссылаемся на ListView в activity_main mListView = (ListView) findViewById(R.id.lv_products); } /** метод загрузки данных из url */ private String downloadUrl(String strUrl) throws IOException { String data = ""; InputStream iStream = null; try { URL url = new URL(strUrl); // Создаем http соединение, соединяемся и считываем данные HttpURLConnection urlConnection = (HttpURLConnection) url .openConnection(); urlConnection.connect(); iStream = urlConnection.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader( iStream)); StringBuffer sb = new StringBuffer(); String line = ""; while ((line = br.readLine()) != null) { sb.append(line); } data = sb.toString(); br.close(); } catch (Exception e) { Log.d("Exception while downloading url", e.toString()); } finally { iStream.close(); } return data; } /** Асинхронно скачиваем json */ private class DownloadTask extends AsyncTask<String, Integer, String> { String data = null; @Override protected String doInBackground(String... url) { try { data = downloadUrl(url[0]); } catch (Exception e) { Log.d("Background Task", e.toString()); } return data; } @Override protected void onPostExecute(String result) { // закончили в non-ui ListViewLoaderTask listViewLoaderTask = new ListViewLoaderTask(); // начинаем парсить listViewLoaderTask.execute(result); } } /** Асинхронно парсим данные и кидаем в listView */ private class ListViewLoaderTask extends AsyncTask<String, Void, SimpleAdapter> { JSONObject jObject; // парсим в non-ui @Override protected SimpleAdapter doInBackground(String... strJson) { try { jObject = new JSONObject(strJson[0]); ProductsJSONParser productsJsonParser = new ProductsJSONParser(); productsJsonParser.parse(jObject); } catch (Exception e) { Log.d("JSON Exception1", e.toString()); } // Инстанцируем класс парсера ProductsJSONParser productsJsonParser = new ProductsJSONParser(); // Список для сохранения List<HashMap<String, Object>> products = null; try { // Получаем спарсеные данные в List (наш список) products = productsJsonParser.parse(jObject); } catch (Exception e) { Log.d("Exception", e.toString()); } // Ключи, которые используем в hashMap String[] from = { "product", "thumb", "description", "price" }; // и айдишники, используемые в listView int[] to = { R.id.tv_product, R.id.iv_thumb, R.id.tv_description, R.id.tv_price }; // задаем адаптер // и закидываем ключи в айдишники SimpleAdapter adapter = new SimpleAdapter(getBaseContext(), products, R.layout.lv_layout, from, to); return adapter; } /** doInBackground выполнен - займемся картинками */ @Override protected void onPostExecute(SimpleAdapter adapter) { // Задаем адаптер для listview mListView.setAdapter(adapter); for (int i = 0; i < adapter.getCount(); i++) { HashMap<String, Object> hm = (HashMap<String, Object>) adapter .getItem(i); String imgUrl = (String) hm.get("thumb_path"); ImageLoaderTask imageLoaderTask = new ImageLoaderTask(); HashMap<String, Object> hmDownload = new HashMap<String, Object>(); hm.put("thumb_path", imgUrl); hm.put("position", i); // запускаем ImageLoaderTask для скачивания // и актуализации картинок в listview imageLoaderTask.execute(hm); } } } /** Асинхронно качаем картинки и помещаем в listView */ private class ImageLoaderTask extends AsyncTask<HashMap<String, Object>, Void, HashMap<String, Object>> { @Override protected HashMap<String, Object> doInBackground( HashMap<String, Object>... hm) { InputStream iStream = null; String imgUrl = (String) hm[0].get("thumb_path"); int position = (Integer) hm[0].get("position"); URL url; try { url = new URL(imgUrl); // создаем соединение и подключаемся HttpURLConnection urlConnection = (HttpURLConnection) url .openConnection(); urlConnection.connect(); // считываем данные iStream = urlConnection.getInputStream(); // директория кеширования File cacheDirectory = getBaseContext().getCacheDir(); // временно сохраняем картинку в кеш-дир File tmpFile = new File(cacheDirectory.getPath() + "/ocpl_" + position + ".png"); // поток в кеш-файл FileOutputStream fOutStream = new FileOutputStream(tmpFile); // из потока в картинку Bitmap b = BitmapFactory.decodeStream(iStream); // пишем файл в темп (png) b.compress(Bitmap.CompressFormat.PNG, 100, fOutStream); // сбрасываем и закрываем поток fOutStream.flush(); fOutStream.close(); // создаем hashMap для передачи картинки // в listview, в соответствии с позицией HashMap<String, Object> hmBitmap = new HashMap<String, Object>(); // сохраняем путь к картинке // и позицию картинки в listview hmBitmap.put("thumb", tmpFile.getPath()); hmBitmap.put("position", position); // возвращаем объект с картинкой и позицией return hmBitmap; } catch (Exception e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(HashMap<String, Object> result) { // теперь получаем путь и позицию String path = (String) result.get("thumb"); int position = (Integer) result.get("position"); // задаем адаптер SimpleAdapter adapter = (SimpleAdapter) mListView.getAdapter(); // забираем объекты из hashMap // с соответствующей позицией в listview HashMap<String, Object> hm = (HashMap<String, Object>) adapter .getItem(position); // заменяем текущий путь (сейчас "заглушка" - res/drawable/blank.png) hm.put("thumb", path); // и сообщаем listView об изенении содержимого adapter.notifyDataSetChanged(); } } } Запускаем приложение и любуемся результатом: До новых встреч -
Добрый день, Как то ночью полез я смотреть логи своего сайта там вижу такой текст. File does not exist: ......./manifest.json Вроде все ясно нет файла manifest.json. У меня сайт на движке opencart 2.2 какой должен быть типовым manifest.json? или какой нибудь простенький и полезный файлик)) Из за этой файла запиваются лог файл.
-
- manifest.json
- manifest
-
(and 1 more)
Tagged with: