java - 无法为 Android Studio 插入值

标签 java android firebase android-studio android-layout

如果我尝试插入 "Test1."作为 EditText 的值,然后应用程序将崩溃。但是,如果我删除了句点 (.) 并重新尝试输入该值,那就没问题了。为什么我不能用句点(.)插入值。下面是我的代码 fragment ,包括 xml 文件。

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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="com.example.naveenbimsara.pharmacy.MainActivity"

    >

    <EditText
        android:id="@+id/Mediname"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="textUri|textWebEditText|textMultiLine|textNoSuggestions|textFilter|text|textPostalAddress|textEmailAddress|textEmailSubject"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.545"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.287"
        tools:text="@string/google_storage_bucket" />

    <Button
        android:id="@+id/insbtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Insert"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.498"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.691" />

    <Spinner
        android:id="@+id/availa"
        android:layout_width="330dp"
        android:layout_height="55dp"
        android:layout_marginStart="40dp"
        android:layout_marginLeft="40dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.465" />
</android.support.constraint.ConstraintLayout>

AddMedicine.java
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Spinner;
import android.widget.Toast;

import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

public class AddMedicine extends AppCompatActivity {
    private static final String TAG = "AddMedicine";

    EditText mName;
    Spinner mySpinner;
    ArrayAdapter<String>myAdapter;
    Button mInsert;
    DatabaseReference reff;
    Medi medi;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add_medicine);
        mName=(EditText)findViewById(R.id.Mediname);
        mySpinner=(Spinner)findViewById(R.id.availa);

        myAdapter = new ArrayAdapter<String>(AddMedicine.this,android.R.layout.simple_list_item_1,getResources().getStringArray(R.array.ava));
        myAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        mySpinner.setAdapter(myAdapter);

        mInsert=(Button)findViewById(R.id.insbtn);
        medi=new Medi();
        reff= FirebaseDatabase.getInstance().getReference().child("Medicine");
        mInsert.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                medi.setName(mName.getText().toString().trim());
                medi.setAvailable(mySpinner.getSelectedItem().toString());
                final String Name=mName.getText().toString().trim();
                if(Name.length()==0)
                {
                    mName.requestFocus();
                    mName.setError("FIELD CANNOT BE EMPTY");
                }


                else {
                    reff.child(mName.getText().toString().trim()).setValue(medi);
                    Toast.makeText(AddMedicine.this, "Data Inserted sucessfully", Toast.LENGTH_LONG).show();
                }
            }
        });
    }
}

Medi.java
public class Medi {
    private String Name;
    private String Available;


    public Medi() {
    }

    public Medi(String name, String available) {
        Name = name;
        Available = available;
    }

    public String getName() {
        return Name;
    }

    public void setName(String name) {
        Name = name;
    }

    public String getAvailable() {
        return Available;
    }

    public void setAvailable(String available) {
        Available = available;
    }


}

Logcat

enter image description here

enter image description here

最佳答案

是的,我明白了。原因是您试图添加您的 EditText作为 Firebase 数据库子引用的值。因此,有些特殊字符不能使用,包括句点(.)。

当 dot 指定在 dot 之后没有其他文本时,它会导致应用程序崩溃,因为 dot 标识为另一个子节点。阅读 more here .

以下不能用作 firebase 数据库键(子名称):

  • . (期)
  • $ (美元符号)
  • [ (左方括号)
  • ] (右方括号)
  • # (哈希或英镑符号)
  • / (正斜杠)
  • 关于java - 无法为 Android Studio 插入值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61735046/

    相关文章:

    java - Tomcat 7 PermGen Space 或无法创建 JVM

    android - 如何在 Canvas 上绘制大量矩形并且性能良好?

    javascript - 从 firebase 获取数据不起作用

    java - 从 Firestore 下载数据较晚

    java - 在 java 中创建一个简单的 gui 来运行后台进程

    java - 制作字符串所需的旋转次数

    java - 无法通过Java中的Selenium定位父iframe内的子iframe元素

    java - 如何在android中的字符串中隐藏应用程序网址

    Android 使用 Kerberos 进行身份验证

    Java - firestore int 或 Integer 中哪个最好使用?