空数据字段

时间:2018-09-11 14:35:13

标签: java android firebase google-cloud-firestore

我有两个对象:对象“ 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);
}

0 个答案:

没有答案