【问题标题】:Data not uploading to Firebase database (Android Studio)数据未上传到 Firebase 数据库 (Android Studio)
【发布时间】:2020-08-27 11:57:17
【问题描述】:

我在 Android Studio 上创建了非常简单的应用,我想连接到 Firebase。我创建了一个类:

public class Lek {

    public String nazwa;
    public String nazwa1;

    public Lek() {
    }

    public String getNazwa() {
        return nazwa;
    }

    public String getNazwa1() {
        return nazwa1;
    }

    public void setNazwa(String nazwa) {
        this.nazwa = nazwa;
    }

    public void setNazwa1(String nazwa1) {
        this.nazwa1 = nazwa1;
    }
}

在我的 MainActivity 中,我正在尝试连接到 Firebase 数据库:

public class MainActivity extends AppCompatActivity {

    EditText e1, e2;
    Button b1;
    DatabaseReference reff;
    Lek lek;

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

        e1 = findViewById(R.id.editText);
        e2 = findViewById(R.id.editText2);
        b1 = findViewById(R.id.button);
        lek = new Lek();


        reff = FirebaseDatabase.getInstance().getReference().child("lek");
        b1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                lek.setNazwa(e1.getText().toString().trim());
                lek.setNazwa(e2.getText().toString().trim());

                reff.push().setValue(lek);
            }
        });
    }
}

我还创建了简单的 .xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<EditText
    android:id="@+id/editText"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:ems="10"
    android:inputType="textPersonName"
    android:text="Name"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<EditText
    android:id="@+id/editText2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:ems="10"
    android:inputType="textPersonName"
    android:text="Name"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/editText" />

<Button
    android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Button"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/editText2" />
</androidx.constraintlayout.widget.ConstraintLayout>

但问题是数据没有正确上传到网站上。我设定了关于写作和阅读的规则。在 Android Studio 中,我已正确连接并正确设置了依赖项。当我尝试上传数据时,它们不会出现在网站上。我的 google 帐户在网站和 Android Studio 中是相同的。任何人都可以遇到同样的问题吗?

编辑: 我创建了成功和失败的 Toast 方法,但它确实在屏幕上不显示任何内容:

 reff.child("lek1").setValue(lek)
                    .addOnSuccessListener(new OnSuccessListener<Void>() {
                        @Override
                        public void onSuccess(Void aVoid) {
                            // Write was successful!
                            // ...
                            Toast.makeText(MainActivity.this, "Success", Toast.LENGTH_LONG).show();
                        }
                    })
                    .addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {
                            // Write failed
                            // ...
                            Toast.makeText(MainActivity.this, "Failed", Toast.LENGTH_LONG).show();
                        }
                    });

【问题讨论】:

  • 您没有在调用 setValue() 时检查错误 - 可能出现问题。
  • 我如何检查这个?
  • 我创建了一个关于成功和失败的 Toast,但它确实没有在屏幕上显示任何内容:(
  • 是否显示了这两条 Toast 消息之一?

标签: android firebase firebase-realtime-database


【解决方案1】:

您好,试试这个:

  1. 首先为 Lek 类中的 nazwa 和 nazwa 1 变量创建构造函数

在哪里创建新对象:

lek = new Lek();

... 删除该行并附加代码 On Button Click 以不使用 Class 来上传数据,而是像这样的 HashMap:

HashMap<String, Object> lekHash = new Hashmap();
lekHash.put("lek1", e1.getText().toString().trim());
lekHash.put("lek2", e2.getText().toString().trim();

在此之后,您现在可以像这样设置参考值:

reff.child("lek").setValue(lekHash).addOnCompleteListener(new OnComple...){
    if(task.isSuccessful){
        //Toast Whatever here
    }
}

显然,所有“代码”实际上都不是代码,不幸的是,我没有 IDE,但我希望你能得到指导。并尝试为变量使用更具描述性的名称,这样更容易理解。另外,我推荐一个叫delegation.的概念

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-06
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    • 1970-01-01
    • 2019-11-11
    • 2019-08-29
    • 1970-01-01
    相关资源
    最近更新 更多