Потеря данных при отправке между двумя классами - PullRequest
0 голосов
/ 03 марта 2019

Мое приложение не отображает ничего при передаче данных из одного класса в другой.С помощью отладчика я обнаружил, что мой ArrayList не получает правильное значение из класса.Я отправляю данные с помощью следующей функции:

public class Adaugare extends AppCompatActivity {

private ListView myListView;
private NumeAdapter numeAdapter;
String inume;
int ivarsta;
Intent intent = new Intent();
private ArrayList persoanaArrayList = new ArrayList<>();

public ArrayList getPersoanaArrayList() {
    return persoanaArrayList;
}

public int getPersoanaArrayListsize() {
    return persoanaArrayList.size();
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_adaugare);

    myListView = (ListView) findViewById(R.id.persoana_list);

    Button btn_fin = (Button) findViewById(R.id.btn_fin);
    btn_fin.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            EditText nume_edit_text = (EditText) findViewById(R.id.ins_nume);
            EditText varsta_edit_text = (EditText) findViewById(R.id.ins_var);

            ivarsta = Integer.parseInt(varsta_edit_text.getText().toString());
            inume = nume_edit_text.getText().toString();

            persoanaArrayList.add(new Persoana(inume, ivarsta));
        }
    });
}

}

И получаю их с помощью:

public class Afisare extends AppCompatActivity {

ListView myListView;
NumeAdapter numeAdapter;
Adaugare ad = new Adaugare();
int cate;
int i;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_afisare);

    myListView = (ListView) findViewById(R.id.persoana_list);
    ArrayList<Persoana> persoanaArrayList = new ArrayList<Persoana>(ad.getPersoanaArrayList());
    numeAdapter = new NumeAdapter(this, persoanaArrayList);
    myListView.setAdapter(numeAdapter);
}

Класс Persoana:

public class Persoana {
private String nume;
private int varsta;

Persoana(String inume, int ivar) {
    this.nume = inume;
    this.varsta = ivar;
}

public String getNume() {
    return nume;
}

public int getVarsta() {
    return varsta;
}

public void setNume(String nume) {
    this.nume = nume;
}

public void setVarsta(int varsta) {
    this.varsta = varsta;
}

}

Persoana является основным классом, в нем все сохраняется. ad является объектом Adaugare , Adaugare , являющимся классом, из которого я взял код для getPersoanaArrayList .При отладке некоторые значения появляются в ad , а именно Adaugare @ 4556 , а persoanaArrayList остается null .Мне нужен persoanaArrayList , чтобы я мог инициализировать свой адаптер и listView.Все остальное в коде выглядит хорошо из пошагового тестирования с помощью отладчика.

1 Ответ

0 голосов
/ 03 марта 2019

Ваша проблема со следующей строкой в ​​классе Afisare:

Adaugare ad = new Adaugare();

Вы не можете просто создать новое действие из другого действия и ожидать доступа к общему списку между ними.Для совместного использования данных экземпляра между объектами Java вам нужна ссылка на другой объект.Создание нового экземпляра создаст новый пустой список.Вот почему вы «теряете» данные.Быстрым решением было бы сделать список статичным, чтобы к нему можно было получить доступ из любого экземпляра.

Но поскольку вы имеете дело с Android, правильный способ обмена данными между действиями - использование преднамеренных дополнений.Первое действие начинает второе действие через намерение.Первое действие помещает нужные данные в намерение в качестве дополнений.Второе действие использует getIntent () и различные методы Intent для доступа к дополнительным функциям.

Последний совет: в Android вы никогда не используете новый оператор с Activity.Действия создаются системой для обслуживания намерения.Если вы обнаружите, что используете новый оператор, это признак того, что вы делаете что-то не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...