簡體   English   中英

如何在Firebase數據庫中上載具有新UserId的文本圖像,以避免覆蓋同一UserId上的數據? -安卓

[英]How to Upload Image an Text with a new UserId in firebase database to avoid overwriting of data on the same UserId? - Android

登錄后,我將圖像和文本上傳到Firebase。它第一次成功上傳image urltext 但是,既然我已經登錄,則只需繼續進行上傳活動,然后上傳image urltext

在相同的uid下,新的image urltext覆蓋舊的image urltext 我如何避免這種情況? 每次我上傳image urltext如何創建新的uid新的uid不會覆蓋舊的uid

Firebase數據庫結構

在此之前,我還上傳了另外2張帶有文字的圖片,但是這個新孩子覆蓋了舊圖片。

MyUploadService.java

 public class MyUploadService extends AppCompatActivity {

Button select_image,upload_button;
ImageView user_image;
TextView title;
public static final int READ_EXTERNAL_STORAGE = 0;
private static final int GALLERY_INTENT = 2;
private ProgressDialog mProgressDialog;
private Firebase mRoofRef;
private FirebaseAuth mAuth;
private Uri mImageUri = null;
private DatabaseReference mdatabaseRef;
private StorageReference mStorage;

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    FirebaseApp.initializeApp(this);
    setContentView(R.layout.upload_layout);

    Firebase.setAndroidContext(this);


    mAuth = FirebaseAuth.getInstance();
    select_image = (Button)findViewById(R.id.select_image);
    upload_button = (Button)findViewById(R.id.upload_bttn);
    user_image = (ImageView) findViewById(R.id.user_image);
    title = (TextView) findViewById(R.id.etTitle);

    //Initialize the Progress Bar
    mProgressDialog = new ProgressDialog(MyUploadService.this);


    //Select image from External Storage...
    select_image.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v)
        {
            //Check for Runtime Permission
            if (ContextCompat.checkSelfPermission(getApplicationContext(), 
             Manifest.permission.READ_EXTERNAL_STORAGE)
                    != PackageManager.PERMISSION_GRANTED)
            {
                Toast.makeText(getApplicationContext(), "Call for 
          Permission", Toast.LENGTH_SHORT).show();
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
                {
                    requestPermissions(new String[]
       {Manifest.permission.READ_EXTERNAL_STORAGE}, READ_EXTERNAL_STORAGE);
                }
            }
            else
            {
                callgalary();
            }
        }
    });

    //Initialize Firebase Database paths for database and Storage

    mdatabaseRef = FirebaseDatabase.getInstance().getReference();
    mRoofRef = new Firebase("https://first-project-
           7f5d4.firebaseio.com/").child("Item_Details(categories)").push();  
                // Push will create new child every time we upload data
    mStorage = 
           FirebaseStorage.getInstance().getReferenceFromUrl("gs://first-
       project-7f5d4.appspot.com");


    //Click on Upload Button Title will upload to Database
    upload_button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            final String mName = title.getText().toString().trim();


            if(mName.isEmpty())
            {
                Toast.makeText(getApplicationContext(), "Fill all Field", 
          Toast.LENGTH_SHORT).show();
                return;
            }
            Firebase childRef_name = mRoofRef.child("Image_Title");
            childRef_name.setValue(mName);


            Toast.makeText(getApplicationContext(), "Updated Info", 
                    Toast.LENGTH_SHORT).show();
            signInAnonymously();
                        }
              });

            }


//Check for Runtime Permissions for Storage Access
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] 
                  permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, 
             grantResults);
    switch (requestCode) {
        case READ_EXTERNAL_STORAGE:
            if (grantResults.length > 0 && grantResults[0] == 
             PackageManager.PERMISSION_GRANTED)
                callgalary();
            return;
    }
    Toast.makeText(getApplicationContext(), "...", 
                         Toast.LENGTH_SHORT).show();
              }



//If Access Granted gallery Will open
private void callgalary() {
    Intent intent = new Intent(Intent.ACTION_PICK);
    intent.setType("image/*");
    startActivityForResult(intent, GALLERY_INTENT);
                    }


     //After Selecting image from gallery image will directly uploaded to 
      Firebase Database
     //and Image will Show in Image View
       @Override
           public void onActivityResult(int requestCode,
         int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == GALLERY_INTENT && resultCode == RESULT_OK) {

        mImageUri = data.getData();
        user_image.setImageURI(mImageUri);
        StorageReference filePath = 

      mStorage.child("Item_Images_By_Category").child
                    (mImageUri.getLastPathSegment());

        mProgressDialog.setMessage("Uploading Image....");
        mProgressDialog.show();

        filePath.putFile(mImageUri).addOnSuccessListener(new 
       OnSuccessListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

                Uri downloadUri = taskSnapshot.getDownloadUrl(); 
       //Ignore This error


             mRoofRef.child("Image_URL").setValue(downloadUri.toString());

                Glide.with(getApplicationContext())
                        .load(downloadUri)
                        .crossFade()
                        .placeholder(R.drawable.loading)
                        .diskCacheStrategy(DiskCacheStrategy.RESULT)
                        .into(user_image);
                Toast.makeText(getApplicationContext(), "Updated.", 
          Toast.LENGTH_SHORT).show();
                mProgressDialog.dismiss();
            }
        });
        }
       }

private void signInAnonymously() {


     final String TAG = "Storage#MainActivity";

    // Sign in anonymously. Authentication is required to read or write from 
     Firebase Storage.

    mAuth.signInAnonymously()
            .addOnSuccessListener(this, new OnSuccessListener<AuthResult>() 
      {
                @Override
                public void onSuccess(AuthResult authResult) {
                    Log.d(TAG, "signInAnonymously:SUCCESS");
               Toast.makeText(getApplicationContext(), "Successful Signin", 
    Toast.LENGTH_SHORT).show();
                    updateUI(authResult.getUser());
                }
            })
            .addOnFailureListener(this, new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception exception) {
                    Log.e(TAG, "signInAnonymously:FAILURE", exception);
                    hideProgressDialog();
                    updateUI(null);
                }
            });
}


private void updateUI(FirebaseUser user) {
    // Signed in or Signed out
    if (user != null) {

    } else {

    }


}



private void showProgressDialog(String caption) {
    if (mProgressDialog == null) {
        mProgressDialog = new ProgressDialog(this);
        mProgressDialog.setIndeterminate(true);
    }

    mProgressDialog.setMessage(caption);
    mProgressDialog.show();
}

     private void hideProgressDialog() {
    if (mProgressDialog != null && mProgressDialog.isShowing()) {
        mProgressDialog.dismiss();
        }
      }

要解決此問題,您需要使用updateChildren()方法代替setValue()方法。 由於Firebase由一對鍵和值構成,因此在Map的情況下,它將舊值替換為新值。

希望能幫助到你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM