首页 > 解决方案 > 为什么我无法将数据添加到 Firestore

问题描述

我正在尝试将数据添加到 Firebase Firestore 的文档中。我添加了一个名为 users 的集合。此外,读/写权限现在是开放的。我正在关注这个文档。而且我无法仅在此活动上将数据添加到文档中。在其他活动中,我可以轻松添加数据

这是我的代码:

    package com.example.ewulife;
    
    import androidx.annotation.NonNull;
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.net.Uri;
    import android.os.Bundle;
    import android.provider.MediaStore;
    import android.view.View;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.ImageView;
    import android.widget.RadioButton;
    import android.widget.RadioGroup;
    import android.widget.Spinner;
    import android.widget.Toast;
    
    import com.google.android.gms.tasks.OnFailureListener;
    import com.google.android.gms.tasks.OnSuccessListener;
    import com.google.firebase.auth.FirebaseAuth;
    import com.google.firebase.database.annotations.Nullable;
    import com.google.firebase.firestore.DocumentReference;
    import com.google.firebase.firestore.DocumentSnapshot;
    import com.google.firebase.firestore.EventListener;
    import com.google.firebase.firestore.FirebaseFirestore;
    import com.google.firebase.firestore.FirebaseFirestoreException;
    import com.google.firebase.storage.FirebaseStorage;
    import com.google.firebase.storage.StorageReference;
    import com.google.firebase.storage.UploadTask;
    import com.squareup.picasso.Picasso;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Map;
    
    import de.hdodenhof.circleimageview.CircleImageView;
    
    public class UserInfoActivity extends AppCompatActivity implements View.OnClickListener {
        Button next;
        FirebaseFirestore fstore;
        FirebaseAuth fAuth;
        String userID;
        Spinner bloodgroup;
        RadioGroup radioGroup;
        RadioButton gender;
        ArrayList<String> arrayList_blood;
        ArrayAdapter<String> rr_blood;
        EditText fullname,Mobile,credit,semister,cgpa;
        String Fullname, Blood, Gender;
        ImageView condition, upload;
        CircleImageView profile_image;
        StorageReference storageReference;
        double cred2,semi2,cgpa2;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_user_info);
    
            fAuth = FirebaseAuth.getInstance();
            fstore = FirebaseFirestore.getInstance();
            userID = fAuth.getCurrentUser().getUid();
    
            storageReference = FirebaseStorage.getInstance().getReference();
            bloodgroup = findViewById(R.id.spinner00);
            fullname = findViewById(R.id.editTextTextPersonName00);
            Mobile =findViewById(R.id.editTextTextPersonName200);
            next = findViewById(R.id.button1300);
            upload = findViewById(R.id.imageView1600);
            profile_image = findViewById(R.id.profile_image300);
            credit = findViewById(R.id.editTextNumber);
            semister = findViewById(R.id.editTextNumberDecimal);
            cgpa = findViewById(R.id.editTextNumberDecimal2);
            profile_image.setOnClickListener(this);
            upload.setOnClickListener(this);
            next.setOnClickListener(this);
    
            {
                radioGroup = findViewById(R.id.gender00);
                arrayList_blood = new ArrayList<>();
                arrayList_blood.add("Select");
                arrayList_blood.add("BBA");
                arrayList_blood.add("BSS in Economics");
                arrayList_blood.add("BA in English");
                arrayList_blood.add("LL.B (Hon’s)");
                arrayList_blood.add("BSS in Sociology");
                arrayList_blood.add("BSS in ISLM");
                arrayList_blood.add("BS in Applied Statistics");
                arrayList_blood.add("B.Sc. in ETE");
                arrayList_blood.add("B.Sc. in ICE");
                arrayList_blood.add("B.Sc. in CSE");
                arrayList_blood.add("B.Sc. in EEE");
                arrayList_blood.add("B.Pharm.");
                arrayList_blood.add("B.Sc. in GEB");
                arrayList_blood.add("B.Sc. in Civil Engineering");
                arrayList_blood.add("B.Sc. in ECE");
    
                arrayList_blood.add("Select");
                arrayList_blood.add("MBA");
                arrayList_blood.add("EMBA");
                arrayList_blood.add("MDS");
                arrayList_blood.add("MSS in Economics");
                arrayList_blood.add("MA in English");
                arrayList_blood.add("MA in ELT");
                arrayList_blood.add("LL.M");
                arrayList_blood.add("MPRHGD");
                arrayList_blood.add("PPDM");
                arrayList_blood.add("MS in Applied Statistics");
                arrayList_blood.add("MS in TE");
                arrayList_blood.add("MS in CSE");
                arrayList_blood.add("MS in APE");
                arrayList_blood.add("M. Pharm");
    
            }
            rr_blood = new ArrayAdapter<>(getApplicationContext(), android.R.layout.simple_spinner_item, arrayList_blood);
            bloodgroup.setAdapter(rr_blood);
            int selectedId = radioGroup.getCheckedRadioButtonId();
            gender = findViewById(selectedId);
    
            StorageReference profRef = storageReference.child("ewuuser/"+userID+"profile.jpg");
            profRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                @Override
                public void onSuccess(Uri uri) {
                    Picasso.get().load(uri).into(profile_image);
                    //Picasso.get().load(uri).into(edit_pic);
    
    
                }
            });
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, @androidx.annotation.Nullable Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if (requestCode == 1000) {
                if (resultCode == Activity.RESULT_OK) {
                    Uri imageuri = data.getData();
    
                    profile_image.setImageURI(imageuri);
                    //back_pic.setImageURI(imageuri);
    
                    uploadImageToFirebase(imageuri);
    
                }
            }
        }
    
        private void uploadImageToFirebase(Uri imageUri) {
            //upload
            final StorageReference fileRef = storageReference.child("ewuuser/" + userID + "profile.jpg");
            fileRef.putFile(imageUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                    fileRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                        @Override
                        public void onSuccess(Uri uri) {
                            Picasso.get().load(uri).into(profile_image);
                            //Picasso.get().load(uri).into(back_pic);
    
                            //progressBar_prof.setVisibility(View.GONE);
                        }
                    });
    
                }
            }).addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@androidx.annotation.NonNull Exception e) {
                    Toast.makeText(UserInfoActivity.this, "File is not Uploaded" + e, Toast.LENGTH_SHORT).show();
                    //progressBar_prof.setVisibility(View.GONE);
                }
            });
        }
    
        @Override
        public void onClick(View v) {
    
            if (v.getId() == R.id.imageView1600) {
                Intent openGalery = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                startActivityForResult(openGalery, 1000);
    
            }
            if (v.getId() == R.id.button1300) {
                int selectedId = radioGroup.getCheckedRadioButtonId();
                gender = findViewById(selectedId);
                final String name = fullname.getText().toString();
                final String number = Mobile.getText().toString();
                if (name.isEmpty()) {
                    fullname.setError("Name Required");
                    return;
                }
    
                if (gender == null) {
    
                    Toast.makeText(UserInfoActivity.this, "Selected Gender", Toast.LENGTH_SHORT).show();
                    return;
                }
                String blood_group = bloodgroup.getSelectedItem().toString();
                if (blood_group.equals("Select")) {
                    Toast.makeText(UserInfoActivity.this, "Selected Department", Toast.LENGTH_SHORT).show();
                    return;
                }
                String gen = gender.getText().toString();
                final String cre = credit.getText().toString();
                if(cre.isEmpty()){
                    credit.setError("Enter Valid Credit");
                    Toast.makeText(UserInfoActivity.this, "Enter Valid Credit or leave it blank if you are new", Toast.LENGTH_SHORT).show();
                    return;
                }
                if((Double.parseDouble(cre))>200){
                    credit.setError("Enter valid Credit");
                    Toast.makeText(UserInfoActivity.this, "Enter valid CGPA or leave it blank if you are new", Toast.LENGTH_SHORT).show();
                    return;
                }
    
                final String semi = semister.getText().toString();
                if(semi.isEmpty()){
                    semister.setError("Enter valid semister");
                    Toast.makeText(UserInfoActivity.this, "Enter valid Semister or leave it blank if you are new", Toast.LENGTH_SHORT).show();
                    return;
                }
                if((Double.parseDouble(semi))>20){
                    semister.setError("Enter valid Semister");
                    Toast.makeText(UserInfoActivity.this, "Enter valid CGPA or leave it blank if you are new", Toast.LENGTH_SHORT).show();
                    return;
                }
    
                final String cgpa1 = cgpa.getText().toString();
    
                if(cgpa1.isEmpty()){
                    cgpa.setError("Enter valid CGPA");
                    Toast.makeText(UserInfoActivity.this, "Enter valid CGPA or leave it blank if you are new", Toast.LENGTH_SHORT).show();
                    return;
                }
                if((Double.parseDouble(cgpa1))>4){
                    cgpa.setError("Enter valid CGPA");
                    Toast.makeText(UserInfoActivity.this, "Enter valid CGPA or leave it blank if you are new", Toast.LENGTH_SHORT).show();
                    return;
                }
                final DocumentReference documentReference3 = fstore.collection("EWU_student").document(userID);
//here error 242 //                documentReference3.addSnapshotListener(this, new EventListener<DocumentSnapshot>() {
                    @Override
                    public void onEvent(@Nullable DocumentSnapshot documentSnapshot1, @Nullable FirebaseFirestoreException e2) {
    
    
                        Map<String, Object> user1 = new HashMap<>();
                        user1.put("Name",name);
                        user1.put("EWU_ID",number);
                        user1.put("Credit",cre);
                        user1.put("Semister",semi);
                        user1.put("Program",blood_group);
                        user1.put("Gender",gen);
                        user1.put("USER ID",userID);
                        user1.put("Drop",'0');
                     //   user1.put("Profile Photo","ewuuser/"+userID+"profile.jpg");
                        user1.put("CGPA",cgpa1);
    
    
  //here error show 260//                      documentReference3.set(user1).addOnSuccessListener(new OnSuccessListener<Void>() {
    
    
                            @Override
                            public void onSuccess(Void aVoid) {
                                Toast.makeText(UserInfoActivity.this, "User Updated" + userID, Toast.LENGTH_LONG).show();
                                Intent intent = new Intent(UserInfoActivity.this, MainActivity.class);
    
                                startActivity(intent);
                                finish();
    
    
                            }
                        }).addOnFailureListener(new OnFailureListener() {
                            @Override
                            public void onFailure(@NonNull Exception e) {
                                Toast.makeText(UserInfoActivity.this, "User not updated 3 " + e.toString(), Toast.LENGTH_LONG).show();
                            }
                        });
    
    
                    }
                });
    
    
            }
        }
        }

在日志中我只看到这些东西,不能下问题:

2021-03-20 15:15:05.637 8348-8348/com.example.ewulife E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.ewulife, PID: 8348
    java.lang.IllegalArgumentException: Could not serialize object. Characters are not supported, please use Strings (found in field 'Drop')
        at com.google.firebase.firestore.util.CustomClassMapper.serializeError(CustomClassMapper.java:555)
        at com.google.firebase.firestore.util.CustomClassMapper.serialize(CustomClassMapper.java:133)
        at com.google.firebase.firestore.util.CustomClassMapper.serialize(CustomClassMapper.java:140)
        at com.google.firebase.firestore.util.CustomClassMapper.serialize(CustomClassMapper.java:104)
        at com.google.firebase.firestore.util.CustomClassMapper.convertToPlainJavaTypes(CustomClassMapper.java:78)
        at com.google.firebase.firestore.UserDataReader.convertAndParseDocumentData(UserDataReader.java:231)
        at com.google.firebase.firestore.UserDataReader.parseSetData(UserDataReader.java:75)
        at com.google.firebase.firestore.DocumentReference.set(DocumentReference.java:167)
        at com.google.firebase.firestore.DocumentReference.set(DocumentReference.java:147)
        **at com.example.ewulife.UserInfoActivity$4.onEvent(UserInfoActivity.java:260)
        at com.example.ewulife.UserInfoActivity$4.onEvent(UserInfoActivity.java:242)**
        at com.google.firebase.firestore.DocumentReference.lambda$addSnapshotListenerInternal$2(DocumentReference.java:505)
        at com.google.firebase.firestore.DocumentReference$$Lambda$3.onEvent(Unknown Source:6)
        at com.google.firebase.firestore.core.AsyncEventListener.lambda$onEvent$0(AsyncEventListener.java:42)
        at com.google.firebase.firestore.core.AsyncEventListener$$Lambda$1.run(Unknown Source:6)
        at android.os.Handler.handleCallback(Handler.java:938)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:223)
        at android.app.ActivityThread.main(ActivityThread.java:7656)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)

错误部分是

    **at com.example.ewulife.UserInfoActivity$4.onEvent(UserInfoActivity.java:260)
    at com.example.ewulife.UserInfoActivity$4.onEvent(UserInfoActivity.java:242)**

**有截图 1 有截图 2 **

标签: androidfirebasegoogle-cloud-firestore

解决方案


写这个代码 user1.put("Drop","0") 而不是这个 user1.put("Drop",'0')


推荐阅读