我有两个对象:对象“ globalObject”中包含“ mainData”和“ sencondData”。当我尝试在Firestore中添加最后一个对象时,仅第二个对象(secondData)的字段之一是正确的。该对象的其余字段为null
。此globalObject的第一个对象(主数据)的字段正确。但是只有“ secondData”对象的某些字段为空。
当我以调试模式启动应用程序时,两个对象(mainData和secondData)的所有值均可用并正确设置(在Firebstore的add方法之前和之后)。
/ ****这里我得到我的“ mainObject”信息**** /
//获取主数据 MainData mainData = getMainData();
/ ***********方法获取主要数据*********** /
private MainData getMainData() {
int counterNumber = preferences.getInt(help_counter_form2.DATA_COUNTER_NUMBER, 0);
int areaNumber = preferences.getInt(help_counter_form2.DATA_AREA_NUMBER, 0);
String policeNumber = preferences.getString(help_counter_form2.DATA_POLICE_NUMBER, "");
MainData mainData = new MainData(counterNumber, areaNumber, policeNumber);
return mainData;
}
/****Here i get info of my "secondObject"****/
//get Second data
SecondData secondData = getSecondData();
/***********METHODE GET SECOND DATA ***********/
private SecondData getSecondData() {
String indexNumber = FragmentMyCounter.counterIndex.getText().toString();
SecondData secondData = new SecondData(indexNumber);
return secondData;
}
/*********this is my object MainData********/
public class MainData {
private int counterNumber;
private int areaNumber;
private String policeNumber;
public MainData(int counterNumber, int areaNumber, String policeNumber) {
this.counterNumber = counterNumber;
this.areaNumber = areaNumber;
this.policeNumber = policeNumber;
}
public int getCounterNumber() {
return counterNumber;
}
public void setCounterNumber(int counterNumber) {
this.counterNumber = counterNumber;
}
public int getAreaNumber() {
return areaNumber;
}
public void setAreaNumber(int areaNumber) {
this.areaNumber = areaNumber;
}
public String getPoliceNumber() {
return policeNumber;
}
public void setPoliceNumber(String policeNumber) {
this.policeNumber = policeNumber;
}
}
/ *********这是我的对象SecondData ******** /
公共类SecondData {
private String indexCounter, urlImg, imagePath, imageStorage;
public SecondData(String indexCounter) {
this.indexCounter = indexCounter;
}
public String getIndexCounter() {
return indexCounter;
}
public void setIndexCounter(String indexCounter) {
this.indexCounter = indexCounter;
}
public String getUrlImg() {
return urlImg;
}
public void setUrlImg(String urlImg) {
this.urlImg = urlImg;
}
public String getImagePath() {
return imagePath;
}
public void setImagePath(String imagePath) {
this.imagePath = imagePath;
}
public String getImageStorage() {
return imageStorage;
}
public void setImageStorage(String imageStorage) {
this.imageStorage = imageStorage;
}
}
/ ********这是我的GlobalObject
公共类GlobalObject {
private MainData mainData;
private SecondData secondData;
public GlobalObject ()
{}
public GlobalObject(MainData mainData, SecondData secondData) {
this.mainData = mainData;
this.secondData = secondData;
}
public MainData getMainData() {
return mainData;
}
public void setMainData(MainData mainData) {
this.mainData = mainData;
}
public SecondData getSecondData() {
return secondData;
}
public void setSecondData(SecondData secondData) {
this.secondData = secondData;
}
}
/ *******我使用此代码块首先将映像保存在Firebase云存储上,然后将全局对象(其中包含mainData和secondData)保存到fireStore中****** /
saveImageOperation = SaveImage(存储,secondData);
if (saveImageOperation == -1)
{
resultatFinal = saveImageOperation;
}
else
{
int saveDataOperation = 0;
//save Global object
FirebaseFirestore db = FirebaseFirestore.getInstance();
GlobalObject globalObject = new GlobalObject(mainData, secondData);
}
/*****this is method SaveImage*******/
private int SaveImage(FirebaseStorage存储,最后的SecondData secondData){
final int[] saveImgSucces = {0};
final String uuid = UUID.randomUUID().toString();
final StorageReference storageReference = storage.getReference();
final StorageReference imagesReference = storageReference.child("some_reference");
final StorageReference docImg = imagesReference.child(uuid);
final UploadTask uploadTask = docImg.putBytes(FragmentMyCounter.dataPicture);
Task<Uri> urlTask = uploadTask.continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
@Override
public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
if (!task.isSuccessful())
{
throw task.getException();
}
//continue with task to get the downloas URL
String imageStorage = task.getResult().getStorage().toString();
String imagePath = task.getResult().getStorage().getPath();
secondData.setImageStorage(imageStorage);
secondData.setImagePath(imagePath);
SharedPreferences.Editor editor = preferences.edit();
editor.putString(FragmentMyCounter.ID_PHOTO, imagePath).commit();
return docImg.getDownloadUrl();
}
})
.addOnCompleteListener(new OnCompleteListener<Uri>() {
@Override
public void onComplete(@NonNull Task<Uri> task) {
if (task.isSuccessful())
{
// throw task.getException();
Uri downloadUri = task.getResult();
try {
URL url = new URL(downloadUri.toString());
secondData.setUrlImg(url.toString());
//imgUrl = url.toString();
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
}
});
return saveImgSucces[0];
}
/ *******这是方法saveGlobalObject(此方法将我的两个对象的数据保存在Firestore中)********** /
private int saveGlobalObject(FirebaseFirestore db,GlobalObject globalObject){
final int[] saveDataSucces = {0};
CollectionReference collectionReference = db.collection("some_collection");
collectionReference.add(globalObject)
.addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
@Override
public void onSuccess(DocumentReference documentReference) {
SharedPreferences.Editor editor = preferences.edit();
editor.putString(FragmentMyCounter.ID_DOC_COMPTEUR,documentReference.getId()).commit();
saveDataSucces[0] = 1;
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
saveDataSucces[0] = -1;
}
});
return saveDataSucces[0];
}
/ 我使用saveDataOperation通知我的postExcecute方法中是否发送了数据 /
saveGlobalSbeeObject(db,globalObject,new FirestoreSbeeCallback(){ @Override 公共无效onCallback(int i) { saveDataOperation [0] = i; } });
/ 这是我的新saveGlobalObject方法* /
private void saveGlobalSbeeObject(FirebaseFirestore de,GlobalObject globalObject,final FirestoreSbeeCallback firestoreSbeeCallback){
final int saveDataSucces = 0;
final CollectionReference collectionReference = db.collection("some_reference");
collectionReference.add(globalObject).addOnCompleteListener(new OnCompleteListener<DocumentReference>() {
@Override
public void onComplete(@NonNull Task<DocumentReference> task) {
if(task.isSuccessful())
{
SharedPreferences.Editor editor = preferences.edit();
editor.putString(FragmentMyCounter.ID_DOC_COMPTEUR, task.getResult().getId()).commit();
//Log.d("inside", "Inside onComplete Listener");
firestoreSbeeCallback.onCallback(saveDataSucces);
}
else
{
Log.d("error", "error sending document");
}
}
});
}
/****callBack mehtod in interface****/
private interface FirestoreSbeeCallback
{
void onCallback(int i);
}