i ont ce projet Firebase qui a intégré avec le stockage et la base de données en temps réelcomment mettre à jour la table firebase ajoutant hashmap sans écraser
ce que je veux accomplir est:
1- terme la méthode pushreport() qui ajouter des données à DB;
2 - ajouter une image au stockage;
3 - mettre à jour le même nœud de rapport créé avec imgURL
ici est ma poussée à la base de données Méthode
private String keytocurrentReport = "" ;
private void pushReport() {
//1: report Object
reportValues.put("type", KEY_REPORT_TYPE);
reportValues.put("reportId", KEY_REPORT_ID);
//2 : key pushed
keytocurrentReport = dbInstance.getReference().child("Reports").push().getKey();
//3: children updates
Map<String, Object> childUpdates = new HashMap<>();
childUpdates.put("Reports/" + keytocurrentReport + "/", reportValues);
dbInstance.getReference().updateChildren(childUpdates).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
/* // TODO: 8/29/2017 show Snack Bar Or Dialog
if (ActivtyIsShowing) {
AppUtils.startActivityClearStack(getActivity().getApplicationContext(), ActivityMain.class);
hideProgressDialog();
}*/
Log.d(TAG , "reported pushed") ;
Log.d(TAG , "key = " + keytocurrentReport);
Toast.makeText(MyApplication.getAppContext(), getResources().getString(R.string.report_sent), Toast.LENGTH_SHORT).show();
}
});
}
et voici mon téléchargement au stockage Méthode:
private void uploadImageToStorage(Context ctx) {
String imageName = "report-" + new SimpleDateFormat("ddMMyyyy_HHmmss").format(new java.util.Date());
String pathRefToStoreImage = "Public/Reports/" + uid + "/images/" + imageName + ".png";
StorageReference stoargeRef = FirebaseStorage.getInstance().getReference(pathRefToStoreImage); // is the main hook*//*
UploadTask uploadTask = stoargeRef.putBytes(AppUtils.bitmapToByte(bmReport));
uploadTask.addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
@Override
public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
if (task.isSuccessful()) {
Log.d(TAG , "task uploading image complete ") ;
String stImage = task.getResult().getDownloadUrl().toString();
Toast.makeText(getApplicationContext() , "task ok " , Toast.LENGTH_LONG).show();
HashMap<String , Object > map = new HashMap<String, Object>() ;
map.put("imgURl " ,stImage) ;
pushtoTable(map , "pathtochange");
//todo hrm to push to Report table
//image upladed go and uplad vi
} else {
Toast.makeText(getActivity(), getResources().getString(R.string.network_error), Toast.LENGTH_SHORT).show();
Log.d(TAG, "unable to upload image to db" + task.getException());
}
}
});
}
et voici la méthode de table de mise à jour:
private void pushtoTable(HashMap<String , Object> values , String ptath){
Log.d(TAG , "pushtoTable") ;
Map<String, Object> childUpdates = new HashMap<>();
childUpdates.put("Reports/" + keytocurrentReport, values);
dbInstance.getReference().updateChildren(childUpdates).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
Log.d(TAG , "completed +" + task.getResult()) ;
/*
// TODO: 8/29/2017 show Snack Bar Or Dialog
if (ActivtyIsShowing) {
AppUtils.startActivityClearStack(getActivity().getApplicationContext(), ActivityMain.class);
hideProgressDialog();
}
Toast.makeText(MyApplication.getAppContext(), getResources().getString(R.string.report_sent), Toast.LENGTH_SHORT).show();
*/ Toast.makeText (getApplicationContext(), "les rapports mis à jour", Toast.LENGTH_SHORT) .show();
}
});
}
Le Proplem est la suivante: les valeurs du noeud se Redéfinition avec le nouveau hashmap alors comment puis-je acomplish cela?
Que diriez-vous réellement lire le guide de base firebase? – barotia