0

Here in this class i m generating the qRcode and saving it tot the firebase storage everything is working fine but problem is everytime the qrcode is saved with same name i.e "QR Codes".I want to save the qRcode with different name for diffrent user in QRCodes Folder of Firebase Storage.

import android.app.ProgressDialog;
import android.content.Intent;
import android.graphics.Bitmap;
import android.media.ExifInterface;
import android.net.Uri;
import android.provider.MediaStore;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.StorageMetadata;
import com.google.firebase.storage.StorageReference;
import com.google.firebase.storage.UploadTask;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;

import java.io.ByteArrayOutputStream;

import static android.R.attr.bitmap;

public class Register extends AppCompatActivity {
//firebase auth object
private FirebaseAuth firebaseAuth;
private StorageReference mStorage;

private DatabaseReference mDatabse;

//our new views
private EditText editTextName, editTextAddress, editTextEmail, editTextPhoneOrRid, editTextPassword;
private Button buttonSave;
private ProgressDialog progressDialog;
public final static int QRcodeWidth = 500;
private Bitmap bitmap;
private FirebaseUser user;
private ExifInterface exif;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_register);
    progressDialog = new ProgressDialog(this);
    firebaseAuth = FirebaseAuth.getInstance();
                  user = firebaseAuth.getCurrentUser();
    mDatabse = FirebaseDatabase.getInstance().getReferenceFromUrl("https://lpuevents-8f661.firebaseio.com/AppUsers");
    mStorage = FirebaseStorage.getInstance().getReferenceFromUrl("gs://lpuevents-8f661.appspot.com/QR codes/");
    //getting the views from xml resource
    editTextAddress = (EditText) findViewById(R.id.editText7);
    editTextName = (EditText) findViewById(R.id.editText3);
    editTextEmail = (EditText) findViewById(R.id.editText4);
    editTextPhoneOrRid = (EditText) findViewById(R.id.editText6);
    editTextPassword = (EditText) findViewById(R.id.editText8);
    buttonSave = (Button) findViewById(R.id.button3);
    if (user == null) {
        //closing this activity
        finish();
        //starting login activity
        startActivity(new Intent(this, Login.class));
    }

    buttonSave.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            saveUserInformation();
            // wait(360000);


            registerUser();

        }
    });
}


Bitmap TextToImageEncode(String Value) throws WriterException {
    BitMatrix bitMatrix;
    try {
        bitMatrix = new MultiFormatWriter().encode(
                Value,
                BarcodeFormat.DATA_MATRIX.QR_CODE,
                QRcodeWidth, QRcodeWidth, null
        );

    } catch (IllegalArgumentException Illegalargumentexception) {

        return null;
    }
    int bitMatrixWidth = bitMatrix.getWidth();

    int bitMatrixHeight = bitMatrix.getHeight();

    int[] pixels = new int[bitMatrixWidth * bitMatrixHeight];

    for (int y = 0; y < bitMatrixHeight; y++) {
        int offset = y * bitMatrixWidth;

        for (int x = 0; x < bitMatrixWidth; x++) {

            pixels[offset + x] = bitMatrix.get(x, y) ?
                    getResources().getColor(R.color.black) : getResources().getColor(R.color.white);
        }
    }
    Bitmap bitmap = Bitmap.createBitmap(bitMatrixWidth, bitMatrixHeight, Bitmap.Config.ARGB_4444);

    bitmap.setPixels(pixels, 0, 500, 0, 0, bitMatrixWidth, bitMatrixHeight);
    return bitmap;
}


private void saveUserInformation() {
    //Getting values from database
    final String name = editTextName.getText().toString().trim();
    final String address = editTextAddress.getText().toString().trim();
    final String email = editTextEmail.getText().toString().trim();
    final String phone = editTextPhoneOrRid.getText().toString().trim();
    //String id = user.getUid().trim();
    try {

        bitmap = TextToImageEncode(phone+" "+email);

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
        byte[] data = baos.toByteArray();

        UploadTask uploadTask = mStorage.putBytes(data);
        uploadTask.addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception exception) {
                // Handle unsuccessful uploads
            }
        }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                // taskSnapshot.getMetadata() contains file metadata such as size, content-type, and download URL.
                Toast.makeText(Register.this, "Succesfully Saved...", Toast.LENGTH_LONG).show();
                DatabaseReference userInfo = mDatabse.push();
                Uri downloadUrl = taskSnapshot.getDownloadUrl();
                taskSnapshot.getMetadata();
                userInfo.child("name").setValue(name);
                userInfo.child("email").setValue(email);
                userInfo.child("address").setValue(address);
                userInfo.child("phone").setValue(phone);
                userInfo.child("image").setValue(downloadUrl.toString());

            }
        });

        //imageView.setImageBitmap(bitmap);

    } catch (WriterException e) {
        e.printStackTrace();
    }
}


private void registerUser() {
    String email = editTextEmail.getText().toString().trim();
    String password = editTextPassword.getText().toString().trim();
    //checking if email and passwords are empty
    if (TextUtils.isEmpty(email)) {
        Toast.makeText(this, "Please enter email", Toast.LENGTH_LONG).show();
        return;
    }

    if (TextUtils.isEmpty(password)) {
        Toast.makeText(this, "Please enter password", Toast.LENGTH_LONG).show();
        return;
    }

    progressDialog.setMessage("Registering Please Wait...");
    progressDialog.show();
    progressDialog.dismiss();

    //creating a new user
    firebaseAuth.createUserWithEmailAndPassword(email, password)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    //checking if success
                    if (task.isSuccessful()) {
                        //display some message here
                        Toast.makeText(Register.this, "Successfully registered", Toast.LENGTH_LONG).show();
                    } else {
                        //display some message here
                        Toast.makeText(Register.this, "Registration Error", Toast.LENGTH_LONG).show();
                    }
                    progressDialog.dismiss();
                }
            });

}
}
Shikhar Singh
  • 112
  • 1
  • 11

1 Answers1

0

The issue comes with these two lines:

mStorage = FirebaseStorage.getInstance().getReferenceFromUrl("gs://.../QR codes/");
...
UploadTask uploadTask = mStorage.putBytes(data);

This means that you're uploading to a file named QR%20codes and overwriting it. Instead you need to add a distinct identifier to each file being uploaded:

UploadTask uploadTask = mStorage.child(some-generated-uuid).putBytes(data); // "QR%20codes/some-generated-uuid"

Read our docs on creating references, which hopefully provides some more information. If you're looking for unique names, see this SO post on the subject.

Community
  • 1
  • 1
Mike McDonald
  • 15,609
  • 2
  • 46
  • 49