android - 为什么我无法将数据添加到 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)**
解决方案
写这个代码 user1.put("Drop","0") 而不是这个 user1.put("Drop",'0')
推荐阅读
- amazon-web-services - 在 AWS ELB 的目标组中添加 RDS 作为侦听器
- jmeter - 如何知道jmeter中请求的服务器处理时间是多少?
- python - 机器学习 - 分类问题
- flutter - 获取列表中最受欢迎的值
- python - 如何在邮递员中获取我要查询的特定标签的标题?
- r - R中的线密度热图
- java - 从 oracle 数据库获取表的元数据(所有表名)并将其存储在 java arraylist 中的有效方法
- search-engine - Rocchio 算法在什么向量空间中计算?
- php - 数据表“全部显示”lengthMenu 引发无效 json 错误
- selenium - 如何按顺序执行两个 Cucumber 测试运行器