Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Гордей2901
0 / 0 / 0
Регистрация: 16.08.2016
Сообщений: 11
#1

Picasso

28.08.2016, 15:14. Просмотров 944. Ответов 4
Метки нет (Все метки)

Здравствуйте, уважаемые участники форума!
Снова я со своим Picasso!
Итак, на этот раз у меня вот что. Я должен загрузить из интернета картинку. Вот код picasso:
Java
1
2
3
Picasso.with(context)
                .load("https://maps.googleapis.com/maps/api/staticmap?center=25.3442,17.6113&zoom=16&size=1200x1000&maptype=roadmap&markers=color:blue%7Clabel:A%7C55.5242,37.51285&key=AIzaSyC9h_P0hPC8bYRMi2XtdobHV9WVxrMBCqk")
                .into(googleMap);
Мне надо загружать карту в ImageView (имя googleMap). Так как это делать в основном потоке нельзя, то решил использовать AsyncTask:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class MyTask extends AsyncTask<Void, Void, Void> {
 
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            TextView textView = (TextView)findViewById(R.id.textView);
            textView.setText("Begin");
 
            Picasso.with(context)
                    .load(finalUrl)
                    .into(googleMap);
 
        }
 
        @Override
        protected Void doInBackground(Void... params) {
            try {
                TimeUnit.SECONDS.sleep(2);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return null;
        }
 
        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            TextView textView = (TextView)findViewById(R.id.textView);
            textView.setText("End");
        }
    }
и в главном потоке вместо самого, собственно, picasso, вызываю начало таска .
Но программа ругается! Вылетает на загрузке picasso. Подозреваю, что это из-за того, что из Async Task к пользовательскому интерфейсу не обратишься. Итак вопрос - что исправить? У меня была мысль на счет виртуального imageview, в который я на время загрузил бы картинку, чтобы потом загрузить в нормальный googleMap, но кажется идея создать неопределенный imageView picasso не нравится.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.08.2016, 15:14
Ответы с готовыми решениями:

Picasso не загружает фото
Я получаю JSON в котором хранятся ссылки на изображения. Пробую загрузить их через picasso, и они...

Работа с Picasso в Asynctask
Есть приложение , нужно вывести изображение на imageview из интернета (решил юзать picasso ибо...

Для чего делать Resize при использовании Picasso
Почему нужно иногда использовать resize() когда загружаешь изображения при помощи Picasso? Почему...

Загрузка картинок Picasso из дискового кэша, когда нет интернета
Подскажите как можно при помощи Picasso реализовать загрузку картинок в фон активити, когда нет...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
CoolMind
421 / 404 / 65
Регистрация: 06.10.2012
Сообщений: 1,732
28.08.2016, 22:00 #2
Гордей2901,
https://maps.googleapis.com/maps/api...obHV9WVxrMBCqk
Сложно отлаживать, там только несколько букв.
Цитата Сообщение от Гордей2901 Посмотреть сообщение
Так как это делать в основном потоке нельзя
Откуда такие сведения?
Цитата Сообщение от Гордей2901 Посмотреть сообщение
то решил использовать AsyncTask
И продолжаете грузить в основном потоке (onPreExecute).
Цитата Сообщение от Гордей2901 Посмотреть сообщение
Подозреваю, что это из-за того, что из Async Task к пользовательскому интерфейсу не обратишься.
Я давно с ним не работал. Можно из любого потока, используя runOnUiThread(new Runnable).
Можно также поработать через Handler, там и главный поток, и фоновый можно запустить. Да и зачем этот AsyncTask?
Цитата Сообщение от Гордей2901 Посмотреть сообщение
У меня была мысль на счет виртуального imageview, в который я на время загрузил бы картинку, чтобы потом загрузить в нормальный googleMap, но кажется идея создать неопределенный imageView picasso не нравится.
Вроде, так можно, но я не пробовал.
У Glide в этом смысле есть метод get вместо into (или downoad, я уж подзабыл), потом там можно скачанные данные отобразить в картинке.
Цитата Сообщение от Гордей2901 Посмотреть сообщение
Итак вопрос - что исправить?
Ну попробуйте вначале не мучаться, а сделать всё в основном потоке. Или попробуйте Thread с runOnUiThread по окончании. Или используйте не метод into или load, а какой-то другой.
0
Гордей2901
0 / 0 / 0
Регистрация: 16.08.2016
Сообщений: 11
28.08.2016, 23:09  [ТС] #3
Спасибо за вариант!
Знаю по собственному опыту. Если грузить в основном, то на части телефонов (видимо с маленькой памятью оперативки) не работает, на других все хорошо.
У picasso вроде нету другого метода, кроме описанного мной...
Попробую грузить в другом методе - в "doinback..."
0
Pablito
2707 / 2154 / 731
Регистрация: 12.05.2014
Сообщений: 7,516
Завершенные тесты: 1
29.08.2016, 10:42 #4
Цитата Сообщение от Гордей2901 Посмотреть сообщение
Picasso.with(context) .load(finalUrl) .into(googleMap);
это должно быть в основном потоке
Цитата Сообщение от Гордей2901 Посмотреть сообщение
Но программа ругается! Вылетает на загрузке picasso
обычно копируют сюда полный лог ошибки, а не пересказ
0
xaat
43 / 16 / 6
Регистрация: 05.12.2015
Сообщений: 65
07.09.2016, 21:02 #5
Лучший ответ Сообщение было отмечено Гордей2901 как решение

Решение

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Picasso.with(MainActivity.this)
            .load(imageUrl)
            .into(imageView, new com.squareup.picasso.Callback() {
                        @Override
                        public void onSuccess() {
                            // successfully
 
                        }
 
                        @Override
                        public void onError() {
                            // error
                        }
                    });
0
07.09.2016, 21:02
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru