【问题标题】:how to retrive data from getters in another activity in android如何在android的另一个活动中从getter中检索数据
【发布时间】:2019-03-21 19:04:53
【问题描述】:

我正在创建一个 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);
}
}

Contact getters 类

   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) {

        }
    });

}

【问题讨论】:

  • 您为什么要使用 firebase 来执行此操作?
  • “我无法获取该列表”没有帮助。你有错误吗?行为是什么?
  • java.lang.IndexOutOfBoundsException: Index: 0, Size: 0,这是我尝试从 getter 访问另一个类中的列表时遇到的错误
  • 如果在两个活动之间共享似乎很难,那么您可能不应该为此使用两个单独的活动。
  • 如果您使用 getter 共享数据,请将您的 arraylist 设为静态或将 arraylist 放入 start Activity 的 putextra 中

标签: android firebase android-activity android-lifecycle


【解决方案1】:

Main2Activity 中,您已将引用变量list 创建为new ArrayList&lt;&gt;(),但您从未向其中添加任何内容。

如果您希望能够访问数据,您需要将其从一个Actvity 传递给另一个,或者将对其的引用存储在您可以从两个类访问的static 变量中。

【讨论】:

  • 我直接从 firebase 获取列表,但谢谢
  • 如果您已解决问题,请发布答案并接受该答案。否则,请指出仍然存在的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多