как получить данные из геттеров в другой деятельности в Android - PullRequest
0 голосов
/ 13 марта 2019

Я создаю приложение для Android, в котором храню в firebase и показываю список с подэлементами в одном упражнении, а затем получаю доступ к этому списку в другом занятии, нажав кнопку. Я сохранил и показал данные в базе данных Firebase и в своем первом задании, но я не могу получить этот список в другом задании. Мой код: -

Основная деятельность: -

public class MainActivity extends AppCompatActivity {
EditText getName, getNum;
Button btn,btnNext;
TextView textView;
ListView listView;
DatabaseReference fb;
List<Contact> contactList = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    getName = findViewById(R.id.ed1);
    getNum = findViewById(R.id.ed2);
    textView = findViewById(R.id.text);
    btn = findViewById(R.id.btn);
    btnNext = findViewById(R.id.btnNext);

    listView = findViewById(R.id.listView);

    fb = FirebaseDatabase.getInstance().getReference("Contacts");

    btnNext.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(MainActivity.this,Main2Activity.class);
            startActivity(intent);
            finish();
        }
    });

    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            addContacts();
        }
    });

    fb.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            Contact contact = dataSnapshot.getValue(Contact.class);
            contactList.add(contact);
            listadapter list = new listadapter(MainActivity.this,contactList);
            listView.setAdapter(list);
        }

        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {
            notify();
        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {

        }

        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

}

public void addContacts() {
    String name = getName.getText().toString();
    String num = getNum.getText().toString();
    String id = fb.push().getKey();
    Contact contact = new Contact(name,num);
    fb.child(id).setValue(contact);
}
}

Контактный класс получателей

   public class Contact {

   String contact;
   String name;

public Contact() {  }

public Contact(String name, String contact) {
    this.name = name;
    this.contact = contact;
}

public String getName() {
    return name;
}

public String getContact() {
    return contact;
}
}

настраиваемый класс адаптера

public class listadapter extends ArrayAdapter<Contact> {

private Activity context;
private List<Contact> contactList;

public listadapter(Activity context, List<Contact> contactList) {
    super(context,R.layout.list,contactList);

    this.context = context;
    this.contactList = contactList;
}

public View getView(int position, @Nullable View convertView, @NonNull   ViewGroup parent) {
    LayoutInflater inflater = context.getLayoutInflater();

    View listViewItem = inflater.inflate(R.layout.list, null, true);

    TextView textViewName = listViewItem.findViewById(R.id.name);
    TextView textViewContact = listViewItem.findViewById(R.id.num);

    Contact contact = contactList.get(position);


    textViewName.setText(contact.getName());
    textViewContact.setText(contact.getContact());

    return listViewItem;
}
}

Активность, в которой я пытаюсь получить

public class Main2Activity extends AppCompatActivity {
Button getSub;
List<Contact> list = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);

    getSub = findViewById(R.id.getSub);

    getSub.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Toast.makeText(getApplicationContext(),"Num : "+list.get(0).getContact(),Toast.LENGTH_LONG).show();
        }
    });
}
}

Решение: - Я получил список непосредственно из firebase, и он работает

        protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        call = findViewById(R.id.call);

       db = FirebaseDatabase.getInstance().getReference("Trusted contacts");

    Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
    @Override
        public void run() {
            msgAll();
            for(int i=0;i<ex.size();i++) {
                getNum = "tel: "+ex.get(i).getmText2();
                callAll(getNum);

            }

        }
    }, 500);
}
       @Override
       protected void onStart() {
       super.onStart();
    db.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            ExampleItem contact = dataSnapshot.getValue(ExampleItem.class);
            ex.add(contact);
        }

        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {

        }

        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

}

1 Ответ

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

В Main2Activity вы создали ссылочную переменную list как new ArrayList<>(), но никогда ничего к ней не добавляли.

Если вы хотите иметь доступ к данным, вам потребуетсялибо передать его из одного Actvity в другой, либо сохранить ссылку на него в переменной static, к которой вы можете получить доступ из обоих классов.

...