【问题标题】:how to get firebase database in android studio如何在android studio中获取firebase数据库
【发布时间】:2017-12-08 01:00:12
【问题描述】:

在安卓工作室中, 我无法在我的 firebase 数据库中检索车辆类别。想根据日期获取数据,然后plateno。并将每个条目存储在一个数组中。我已经尝试过这里找到的大多数解决方案,但作为一个菜鸟,我很难浓缩这些解决方案。感谢您的帮助: 这是我的数据库结构:

这是我的代码:

public void getDatabase() {
     FirebaseDatabase myRef = FirebaseDatabase.getInstance();
     DatabaseReference ref = myRef.getReference();
    ref.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
               for(DataSnapshot onemarker: dataSnapshot.getChildren())
                    {
                        key =onemarker.getKey();
                        myvehicle = onemarker.child(key).child("OneMarker").getValue(Vehicle.class);
                        String stats = myvehicle.status;
                        vehiclearray.add(myvehicle);

                  new AlertDialog.Builder(MonitorActivity.this)
                            .setTitle("Vehicle Information")
                            .setMessage("  "+stats+" "+key+"  "+vehiclearray.size())
                            .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialogInterface, int i) {
                                }
                            })
                            .setIcon(R.mipmap.inmissionmarker)
                            .setNegativeButton(android.R.string.cancel,null)
                            .show();

                }
            } 

运行时,应用程序停止并关闭。 这是错误代码:

12-11 08:49:27.336 1272-1272/? D/Settings: Mon Dec 11 08:49:27 GMT+08:00 2017 , device_provisioned : 1
                                       java.lang.RuntimeException
                                           at android.provider.Settings$LogMsg.writeCallStackLog(Settings.java:1085)
                                           at android.provider.Settings$NameValueCache.putStringForUser(Settings.java:1206)
                                           at android.provider.Settings$Global.putStringForUser(Settings.java:12282)
                                           at android.provider.Settings$Secure.putStringForUser(Settings.java:7421)
                                           at android.provider.Settings$Secure.putIntForUser(Settings.java:7533)
                                           at android.provider.Settings$Secure.putInt(Settings.java:7527)
                                           at com.android.launcher2.Launcher.onCreate(Launcher.java:529)
                                           at android.app.Activity.performCreate(Activity.java:6609)
                                           at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1134)
                                           at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3104)
                                           at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3261)
                                           at android.app.ActivityThread.access$1000(ActivityThread.java:219)
                                           at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1735)
                                           at android.os.Handler.dispatchMessage(Handler.java:102)
                                           at android.os.Looper.loop(Looper.java:145)
                                           at android.app.ActivityThread.main(ActivityThread.java:6939)
                                           at java.lang.reflect.Method.invoke(Native Method)
                                           at java.lang.reflect.Method.invoke(Method.java:372)
                                           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
                                           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)

【问题讨论】:

  • 警报对话框只是为了验证数据是否已被检索。

标签: android database firebase firebase-realtime-database


【解决方案1】:

首先,您实际上可以摆脱 onemarker。你不需要另一个钥匙。可以直接用POJO类解析。

onemarker.getValue(Vehicle.class); //onemarker是快照

能否请您添加崩溃日志(即应用关闭)

【讨论】:

  • 感谢您的回复。该应用程序运行没有错误。但对话框中的结果是:null --L-nZBi2qM6jUwlkuWoZ 6. 数据库的当前大小是 6,我假设它被复制到数组中,并且最后一个键也是正确的。字符串 stats 没有值(即使是最后一个数据库条目)。将尝试检查arraylist。这次没有崩溃日志。
  • 另一个观察结果是,alertdialog 可以移出 for 循环。要记住的更重要的一点是 firebase 和 POJO 中的键应该匹配
  • 是的。警报对话框用于检查是否检索到数据库。唯一检索到的数据是键和数组大小。 myvehicle 类返回为空。
【解决方案2】:

这对我有用:

 @Override
public void onStart() {
    super.onStart();
    ValueEventListener markerListener = (new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            vehiclearray.clear();
            int counter=0;
            for (DataSnapshot onemarker : dataSnapshot.getChildren()) {
                myvehicle = onemarker.getValue(Vehicle.class);
                vehiclearray.add(myvehicle);
                tvVehicle1.setText(vehiclearray.get(counter).plateno);
                counter++;
            }
            new AlertDialog.Builder(MonitorActivity.this)
                    .setTitle("Vehicle Information")
                    .setMessage(counter+ "  entries found on database ")
                    .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) {
                        }
                    })
                    .setIcon(R.mipmap.inmissionmarker)
                    .show();
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 2022-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多