Форум программистов, компьютерный форум CyberForum.ru

Отображение картинки в ImageView полученной из ссылки - Android

Восстановить пароль Регистрация
 
Neo-X2006
0 / 0 / 0
Регистрация: 15.03.2016
Сообщений: 85
14.05.2016, 22:38     Отображение картинки в ImageView полученной из ссылки #1
Всем привет!

Длеаю приложение, которое получет JSON с сервера. Вид его следующий:
Кликните здесь для просмотра всего текста
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[
  {
     "id": 1,
     "typeOfOrganization": "Администрации",
     "created_at": 1462233600000,
     "url": "https://...../images/icon.png"
   },
  {
    "id": 2,
    "typeOfOrganization": "архив",
    "created_at": 1462233600000,
    "url": "https://.../images/icon.png"
   }
]

Где в url хранится абсолютный путь к картинке. Этот JSON я успешно получаю:
Кликните здесь для просмотра всего текста
MainActivity.java:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private class OrgMeTask extends AsyncTask<Void, Void, OrgDTO[]> {
        @Override
        protected OrgDTO[] doInBackground(Void... params) {
            RestTemplate template = new RestTemplate();
            template.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
            OrgDTO[] result = template.getForObject(Constans.URL.GET_PUBLIC_ORG_ITEM, OrgDTO[].class);
            return result;
        }
 
        @Override
        protected void onPostExecute(OrgDTO[] orgDTO) {
            List<OrgDTO> data = new ArrayList<>();
            for (int i = 0; i < orgDTO.length; i++) {
                data.add(orgDTO[i]);
            }
            adapter.setData(data);
        }
    }

В листе data приходят данные как на скриншоте. Разметка такая:
Кликните здесь для просмотра всего текста

public_org_item.xml
XML
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="5dp"
    android:layout_marginBottom="3dp"
    android:layout_marginLeft="12dp"
    android:layout_marginRight="12dp">
 
    <android.support.v7.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/cardView"
        card:cardElevation="2dp"
        card:cardUseCompatPadding="true">
 
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="14dp"
            android:orientation="vertical">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/title"
                android:textSize="8pt"
                android:textColor="@color/colorBlack"
                android:paddingBottom="5dp"
                />
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/imageView" />
            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="match_parent">
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="TEST"/>
            </LinearLayout>
        </LinearLayout>
 
    </android.support.v7.widget.CardView>
 
</LinearLayout>

В dto классе созданы соответствующие сеттеры и геттеры:
Кликните здесь для просмотра всего текста
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package com.spravka.dto;
 
import android.graphics.Bitmap;
 
import java.util.Date;
 
public class OrgDTO {
 
    public OrgDTO() {
 
    }
 
    private int id;
    private String typeOfOrganization;
    private Date created_at;
    private String url;
 
    public Bitmap getImage() {
        return image;
    }
 
    public void setImage(Bitmap image) {
        this.image = image;
    }
 
    private Bitmap image;
 
    public String getUrl() {
        return url;
    }
 
    public void setUrl(String url) {
        this.url = url;
    }
 
    public int getId() {
        return id;
    }
 
    public void setId(int id) {
        this.id = id;
    }
 
    public String getTypeOfOrganization() {
        return typeOfOrganization;
    }
 
    public void setTypeOfOrganization(String typeOfOrganization) {
        this.typeOfOrganization = typeOfOrganization;
    }
 
    public Date getCreated_at() {
        return created_at;
    }
 
    public void setCreated_at(Date created_at) {
        this.created_at = created_at;
    }
 
    public OrgDTO(String title) {
        this.typeOfOrganization = title;
    }
 
    public String getTitle() {
        return typeOfOrganization;
    }
 
    public void setTitle(String title) {
        this.typeOfOrganization = title;
    }
}

В адаптере прописал:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public void onBindViewHolder(OrgViewHolder holder, int position) {
        OrgDTO item = data.get(position);
        holder.title.setText(item.getTitle());
        holder.imageView.setImageBitmap(item.getImage());
    }
 public static class OrgViewHolder extends RecyclerView.ViewHolder {
 
        CardView cardView;
        TextView title;
        ImageView imageView;
 
        public OrgViewHolder(View itemView) {
            super(itemView);
            cardView = (CardView) itemView.findViewById(R.id.cardView);
            title = (TextView) itemView.findViewById(R.id.title);
            imageView = (ImageView) imageView.findViewById(R.id.imageView);
        }
    }


Подскажите пожалуйста, как и где теперь мне из ссылки получить Bitmap и проставить его в ImageView?
Миниатюры
Отображение картинки в ImageView полученной из ссылки  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
YuraAAA
 Аватар для YuraAAA
1563 / 1305 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
15.05.2016, 01:09     Отображение картинки в ImageView полученной из ссылки #2
Neo-X2006, Использовать готовое решение, например, Picasso:

1. build.gradle в dependencies
Код
compile 'com.squareup.picasso:picasso:2.5.2'
2. Добавляем контекст в адаптер.

Java
1
2
3
4
5
6
7
public class YourAdapter extends RecyclerView.Adapter<YourAdapter.OrgViewHolder> {
    
    private Context context;
   
    public YourAdapter(Context context) {
         this.context = context;
    }
3.
Java
1
2
3
4
5
public void onBindViewHolder(OrgViewHolder holder, int position) {
        OrgDTO item = data.get(position);
        holder.title.setText(item.getTitle());
        Picasso.with(context).load(item.getImage()).into(holder.imageView);       
    }
Neo-X2006
0 / 0 / 0
Регистрация: 15.03.2016
Сообщений: 85
15.05.2016, 13:17  [ТС]     Отображение картинки в ImageView полученной из ссылки #3
YuraAAA, если так, то выдает exception:
Java
1
java.lang.IllegalArgumentException: Context must not be null
Я еще пробывал сделать таким способом:
Java
1
2
3
4
5
6
7
public void onBindViewHolder(OrgViewHolder holder, int position) {
        OrgDTO item = data.get(position);
        holder.title.setText(item.getTitle());
        Picasso.with(holder.imageView.getContext())
                .load(item.getUrl())
                .into(holder.imageView);
    }
Хотя в item.getUrl() 100% лежит url к картинке, он выдает exception:
Java
1
  java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.widget.ImageView.getContext()' on a null object reference
И ругается на эту строчку:
Java
1
Picasso.with(holder.imageView.getContext())
Подскажи пожалуйста, с чем тут проблема?
Паблито
не спать!
1874 / 1608 / 496
Регистрация: 12.05.2014
Сообщений: 5,813
Завершенные тесты: 1
15.05.2016, 13:32     Отображение картинки в ImageView полученной из ссылки #4
imageview 100% не нициализовано при создании холдера (в конструкторе холдера)
Neo-X2006
0 / 0 / 0
Регистрация: 15.03.2016
Сообщений: 85
15.05.2016, 13:44  [ТС]     Отображение картинки в ImageView полученной из ссылки #5
Паблито, да вроде как инициализировал:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
 public static class OrgViewHolder extends RecyclerView.ViewHolder {
 
        CardView cardView;
        TextView title;
        ImageView imageView;
 
        public OrgViewHolder(View itemView) {
            super(itemView);
            cardView = (CardView) itemView.findViewById(R.id.cardView);
            title = (TextView) itemView.findViewById(R.id.title);
            imageView = (ImageView) imageView.findViewById(R.id.imageView);
        }
    }
Паблито
не спать!
1874 / 1608 / 496
Регистрация: 12.05.2014
Сообщений: 5,813
Завершенные тесты: 1
15.05.2016, 13:47     Отображение картинки в ImageView полученной из ссылки #6
и эта imageview есть в разметке? это можно увидеть?
Neo-X2006
0 / 0 / 0
Регистрация: 15.03.2016
Сообщений: 85
15.05.2016, 13:55  [ТС]     Отображение картинки в ImageView полученной из ссылки #7
Паблито, вот разметка:
Кликните здесь для просмотра всего текста
XML
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="5dp"
    android:layout_marginBottom="3dp"
    android:layout_marginLeft="12dp"
    android:layout_marginRight="12dp">
 
    <android.support.v7.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/cardView"
        card:cardElevation="2dp"
        card:cardUseCompatPadding="true">
 
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="14dp"
            android:orientation="vertical">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/title"
                android:textSize="8pt"
                android:textColor="@color/colorBlack"
                android:paddingBottom="5dp"
                />
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:id="@+id/imageView" />
            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="match_parent">
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="TEST"/>
            </LinearLayout>
        </LinearLayout>
 
    </android.support.v7.widget.CardView>
 
</LinearLayout>
Паблито
не спать!
1874 / 1608 / 496
Регистрация: 12.05.2014
Сообщений: 5,813
Завершенные тесты: 1
15.05.2016, 13:57     Отображение картинки в ImageView полученной из ссылки #8
а что в onCreateView адаптера?
Neo-X2006
0 / 0 / 0
Регистрация: 15.03.2016
Сообщений: 85
15.05.2016, 13:59  [ТС]     Отображение картинки в ImageView полученной из ссылки #9
Паблито, вот это:
Java
1
2
3
4
5
@Override
    public OrgViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view =  LayoutInflater.from(parent.getContext()).inflate(R.layout.public_org_item, parent, false);
        return new OrgViewHolder(view);
    }
Еще onCreateView есть в фрагменте:
Java
1
2
3
4
5
6
7
8
9
10
@Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        view = inflater.inflate(LAYOUT, container, false);
        RecyclerView rv = (RecyclerView)view.findViewById(R.id.recycleView);
        rv.setLayoutManager(new LinearLayoutManager(context));
        adapter = new OrgListAdapter(data);
        rv.setAdapter(adapter);
        return view;
    }
YuraAAA
 Аватар для YuraAAA
1563 / 1305 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
15.05.2016, 14:03     Отображение картинки в ImageView полученной из ссылки #10
Neo-X2006, так а чего Вы null передаёте в адаптер вместо контекста?

Java
1
2
3
4
5
6
7
8
9
public class OrgListAdapter extends RecyclerView.Adapter<OrgListAdapter.OrgViewHolder> {
    
    private Context context;
   
    public YourAdapter(Context context) {
         this.context = context;
    }
 
}
Java
1
new OrgListAdapter(getActivity());
Паблито
не спать!
1874 / 1608 / 496
Регистрация: 12.05.2014
Сообщений: 5,813
Завершенные тесты: 1
15.05.2016, 14:05     Отображение картинки в ImageView полученной из ссылки #11
imageView = (ImageView) imageView.findViewById(R.id.imageView);
Java
1
imageView = (ImageView) itemView.findViewById(R.id.imageView);
Neo-X2006
0 / 0 / 0
Регистрация: 15.03.2016
Сообщений: 85
15.05.2016, 14:32  [ТС]     Отображение картинки в ImageView полученной из ссылки #12
Паблито, действительно, проглядел это. Уже лучше, но все равно крашется:
Java
1
05-15 07:10:45.187 9409-9481/com.spravka A/libc: Fatal signal 4 (SIGILL), code 2, fault addr 0xf5d8fed0 in tid 9481 (images/icon.png)
mages/icon.png - это как раз иконка с сервера.

Добавлено через 3 минуты
YuraAAA, мне еще один конструктор в OrgListAdapter нужно создавать? Там уже есть:
Java
1
2
3
4
5
 private List<OrgDTO> data;
 
    public OrgListAdapter(List<OrgDTO> data) {
        this.data = data;
    }
Эту строку:
Java
1
new OrgListAdapter(getActivity());
Прописываю в фрагменте в onCreateView:
Java
1
2
3
4
5
6
7
8
9
10
11
@Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        view = inflater.inflate(LAYOUT, container, false);
        RecyclerView rv = (RecyclerView)view.findViewById(R.id.recycleView);
        rv.setLayoutManager(new LinearLayoutManager(context));
        adapter = new OrgListAdapter(data);
        new OrgListAdapter(context);
        rv.setAdapter(adapter);
        return view;
    }
Но ошибку это не решает, все равно ругается на null

Добавлено через 14 минут
Может ошибка
Java
1
05-15 07:10:45.187 9409-9481/com.spravka A/libc: Fatal signal 4 (SIGILL), code 2, fault addr 0xf5d8fed0 in tid 9481 (images/icon.png)
Из-за того, что картинка лежит на https, а не на http?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.05.2016, 15:22     Отображение картинки в ImageView полученной из ссылки
Еще ссылки по теме:

Баг с imageView Android
Android Анимация ImageView
Android Отображение картинки в месте нажатия на экран
ImageView вращение Android
Android ImageView и анимация

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

Или воспользуйтесь поиском по форуму:
Паблито
не спать!
1874 / 1608 / 496
Регистрация: 12.05.2014
Сообщений: 5,813
Завершенные тесты: 1
15.05.2016, 15:22     Отображение картинки в ImageView полученной из ссылки #13
- указывать надо полный путь к картинке
- контекст можно брать прямо с imageView, там точно работает, проверено не раз
Yandex
Объявления
15.05.2016, 15:22     Отображение картинки в ImageView полученной из ссылки
Ответ Создать тему
Опции темы

Текущее время: 13:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru