2017-09-10 1 views
0

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?

+0

Que diriez-vous réellement lire le guide de base firebase? – barotia

Répondre

0

utiliser le Push()

final YourObject object = new YourObject(); 
     object .setTitle(objectTitleString); 
     object .setDate(objectDateString); 
     mFirebaseref .child("your Where you want to update).push().setValue(object); 

Créer une classe modèle

public class YourObject implements Serializable { 

private String mTitle; 
private String mDate; 

/*Object Model to get and set news data*/ 
public String getNewsTitle() { 
return mTitle; 

public String getmDate(String date) 
return mDate 
} 

public void setmTitle() { 
this.mTitle = title; 
} 
...