【问题标题】:Get Firebase Child as ArrayList to be passed through Intent获取 Firebase Child 作为 ArrayList 以通过 Intent 传递
【发布时间】:2017-06-20 04:09:00
【问题描述】:

我是设计 Firebase 数据库的新手。所以我有这棵树,它看起来像这样:

I can't display an Image. Here's the Link

问题是我无法获取所有“堵塞”数据,将其插入到 ArrayList 中,通过意图传递它然后显示它。到目前为止,这是我的想法:

MapFragment.java

Double latitude_, longitude_;
    String nama_tempat, kategori, alamat, nomor_telepon, harga, gambar;
    ArrayList<String> jamOperasional = new ArrayList<>();
.
.
.
for(DataSnapshot child : dataSnapshot.child("places").getChildren())
                {
                    latitude_ = child.child("latitude").getValue(Double.class);
                    longitude_ = child.child("longitude").getValue(Double.class);
                    nama_tempat = child.child("nama").getValue(String.class);
                    kategori = child.child("kategori").getValue(String.class);
                    alamat = child.child("alamat").getValue(String.class);
                    harga = child.child("harga").getValue(String.class);
                    nomor_telepon = child.child("nomor_telepon").getValue(String.class);
                    gambar = child.child("gambar").getValue(String.class);
                    for (DataSnapshot operasional : child.child("jam").getChildren()) {
                        jamOperasional.add(operasional.child("senin").getValue(String.class));
                        jamOperasional.add(operasional.child("selasa").getValue(String.class));
                        jamOperasional.add(operasional.child("rabu").getValue(String.class));
                        jamOperasional.add(operasional.child("kamis").getValue(String.class));
                        jamOperasional.add(operasional.child("jumat").getValue(String.class));
                        jamOperasional.add(operasional.child("sabtu").getValue(String.class));
                        jamOperasional.add(operasional.child("minggu").getValue(String.class));

                    }
DetailsModel detail = new DetailsModel(latitude_, longitude_,nama_tempat,
                            kategori,alamat,harga,nomor_telepon,gambar,jamOperasional);
.
.
.
DetailsModel detail = detailMarkerMap.get(marker);
                Intent mainIntent = new Intent(getActivity(),DetailsActivity.class);
                Bundle bundle = new Bundle();
                bundle.putString("Judul", detail.getNama_tempat());
                bundle.putString("Alamat", detail.getAlamat());
                bundle.putString("Harga", detail.getHarga());
                bundle.putString("NomorTelepon", detail.getNomor_telepon());
                bundle.putDouble("Latitude", detail.getLatitude());
                bundle.putDouble("Longitude", detail.getLongitude());
                bundle.putString("Gambar", detail.getGambar());
                bundle.putStringArrayList("Jam", detail.getJamOperasional());
                mainIntent.putExtras(bundle);
                getActivity().startActivity(mainIntent);

DetailsActivity.java

for(int i = 0; i < bundle.getStringArrayList("Jam").size(); i++) {
            placeHours.append(bundle.getStringArrayList("Jam").get(i) + "\n");
        }

这给了我大约 10 行 ++ 的空输出。至少如果它是错误的,它应该打印 7 个空输出。我希望这些信息对您有所帮助

【问题讨论】:

    标签: android firebase android-intent arraylist firebase-realtime-database


    【解决方案1】:

    首先,请验证是否所有这些变量都是not null -> latitude_longitude_nama_tempat 等等。要在活动之间使用这些变量,我建议您使用SharedPreferences,如果您需要在应用程序的所有活动中使用它们,或者如果您只想在第二个活动中使用它们,请使用以下代码:

    //In First Activity
    Intent mainIntent = new Intent(getActivity(), DetailsActivity.class);
    intent.putExtra("Judul", detail.getNama_tempat());
    intent.putExtra("Alamat", detail.getAlamat());
    intent.putExtra("Harga", detail.getHarga());
    //and so on
    startActivity(mainIntent);
    

    还有这段代码,用来取回这些值:

    //In Second Activity
    String Judul = (String) getIntent().getExtras().get("Judul");
    String Alamat = (String) getIntent().getExtras().get("Alamat");
    String Harga = (String) getIntent().getExtras().get("Harga");
    //and so on
    

    要以正确的方式获取和其他值,请使用以下代码:

    jamOperasional.add(operasional.child("jam").child("senin").getValue(String.class));
    jamOperasional.add(operasional.child("jam").child("selasa").getValue(String.class));
    jamOperasional.add(operasional.child("jam").child("rabu").getValue(String.class));
    jamOperasional.add(operasional.child("jam").child("kamis").getValue(String.class));
    jamOperasional.add(operasional.child("jam").child("jumat").getValue(String.class));
    jamOperasional.add(operasional.child("jam").child("sabtu").getValue(String.class));
    jamOperasional.add(operasional.child("jam").child("minggu").getValue(String.class));
    

    如您所见,我删除了 for loop,因为它不是必需的,并为每个对应的变量添加了新的 .child("jam")

    希望对你有帮助。

    【讨论】:

    • 我的问题是获取“Jam”的孩子,而不是其他人。 Judul、alamat 和 harga 完美地显示了输出。
    • 我明白了,所以它不必在 for 循环中。它以这种方式工作。非常感谢
    猜你喜欢
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-24
    相关资源
    最近更新 更多