2016-11-14 1 views
0

Hier in dieser Klasse im Generieren der qRcode und Speichern der Firebase Speicher alles funktioniert gut, aber Problem ist immer der QRCode ist mit dem gleichen Namen gespeichert zB "QR Codes" .I Ich möchte den QR-Code mit einem anderen Namen für den anderen Benutzer im QRCodes-Ordner des Firebase-Speichers speichern.QRCode Bitmap Upload auf Fiebase Database mit verschiedenen Dateinamen

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(); 
       } 
      }); 

} 
} 
+0

Kann mir bitte jemand helfen? –

Antwort

0

Das Problem kommt mit diesen beiden Linien:

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

Dies bedeutet, dass Sie in einer Datei QR%20codes und Überschreiben genannt hochlädst. Stattdessen müssen Sie eine eindeutige Kennung für jede Datei hochgeladen werden hinzufügen:

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

unsere docs on creating references lesen, die hoffentlich ein paar mehr Informationen zur Verfügung stellt. Wenn Sie nach eindeutigen Namen suchen, finden Sie unter this SO post zum Thema.

+0

Es überschreibt immer noch das Bild –

+0

Kannst du mir den Code für die Generierung von verschiedenen alphanumerischen Zeichen jedes Mal geben –

+0

Ich tat, es ist in der verknüpften Stackoverflow-Post: http://StackOverflow.com/Questions/37444685/Store-files-with- eindeutige-zufällige Namen –

Verwandte Themen