@korolevsky_s
iOS Developer

Не могу достучаться к классу из активити?

В предыдущем вопросе мне очень помогли с грамотным созданием ArrayList (за это искреннее спасибо). Вот модифицированные его конструкция и конструкция класса (вопросы под кодом):
import java.util.ArrayList;
import java.util.List;

public class Colors {

    String name;
    Integer r;
    Integer g;
    Integer b;
    String hex;
    String cmyk;
    Boolean luminous;
    Boolean metallic;

    public Colors (String name, Integer r, Integer g, Integer b, String hex, String cmyk, Boolean luminous, Boolean metallic) {
        setName(name);
        setR(r);
        setG(g);
        setB(b);
        setHex(hex);
        setCmyk(cmyk);
        setLuminous(luminous);
        setMetallic(metallic);
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setR(Integer r) {
        this.r = r;
    }

    public Integer getR() {
        return r;
    }

    public void setG(Integer g) {
        this.g = g;
    }

    public Integer getG() {
        return g;
    }

    public void setB(Integer b) {
        this.b = b;
    }

    public Integer getB() {
        return b;
    }

    public void setHex(String hex) {
        this.hex = hex;
    }

    public String getHex() {
        return hex;
    }

    public void setCmyk(String cmyk) {
        this.cmyk = cmyk;
    }

    public String getCmyk() {
        return cmyk;
    }

    public void setLuminous(Boolean luminous) {
        this.luminous = luminous;
    }

    public Boolean getLuminous() {
        return luminous;
    }

    public void setMetallic(Boolean metallic) {
        this.metallic = metallic;
    }

    public Boolean getMetallic() {
        return metallic;
    }

    List<Colors> colorsArray = new ArrayList<>();

    public void addColors() {
        colorsArray.add(new Colors("1000", 205, 186, 136, "#cdba88", "5, 10, 40, 10", false, false));
        colorsArray.add(new Colors("1001", 208, 176, 132, "#d0b084", "5, 20, 40, 10", false, false));
        colorsArray.add(new Colors("1002", 210, 170, 109, "#d2aa6d", "5, 20, 50, 10", false, false));

        System.out.println ("Размер массива равен '" + Integer.valueOf (colorsArray.size()) + "' элементам");
    }

}


Проблемы и вопросы:
1. В активити создаю переменную с типом данных Colors. Colors colors; и пытаюсь достучаться до до array
System.out.println ("Размер массива равен '" + Integer.valueOf (colors.colorsArray.size()) + "' элементам");
приложение крашится.
2. Создать экземпляр класса тоже не могу: Colors colors = new Colors();
3. А array вообще можно заранее заполнить без add()?
4. Данными из array я буду заполнять listview. Как получить доступ к элементам по их ключам name, r, g и т.д.?

Прошу прощение за, может, глупые вопросы, но проект горит, а перестроиться с iOS на Android для меня сложновато...
  • Вопрос задан
  • 202 просмотра
Решения вопроса 1
niku_andrew
@niku_andrew
Программист
У вас в colorsArray - объекты класса Colors. При доступе по индексу из этого списка получаете объект, а дальше делаете с ним всё что нужно - на все поля у вас есть геттеры/сеттеры.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
а перестроиться с iOS на Android для меня сложновато

А что сложного то? Всё тоже самое. У вас конструктор в классе имеет параметры.
А вы пытаетесь создать объект через конструктор без параметров, такого конструктора у вас нет.
Создать экземпляр класса тоже не могу: Colors colors = new Colors();


Дальше. Что бы получить доступ к "colorsArray" он должен быть объявлен как public. Либо написать для него getter.

В активити создаю переменную с типом данных Colors. Colors colors;

Это ссылка на null.

Любой человек, который работал с ООП и в глаза не видел java, должен такие простейшие вещи понимать не зависимо от языка.
Ответ написан
@korolevsky_s Автор вопроса
iOS Developer
Вроде с доступностью класса разобрался. По совету написал getter для colorsArray, доступ к colorsArray получил. Но как получить доступ еще глубже. Допустим, мне нужно присвоить переменной значение name по индексу 5. Могу работать только с индексом colorsArray.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы