2016-11-14 25 views
0

在這裏類生成qRcode並將其保存到firebase存儲一切工作正常,但問題是每次qrcode保存相同的名稱,即「QR碼」.I想要將不同用戶的qRcode另存爲Firebase存儲的QRCodes文件夾中。QRCode位圖上傳到Fiebase Databse用不同的文件名

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

任何人都可以請幫助我嗎? –

回答

0

問題帶有這兩條線:

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

這意味着你要上傳到一個名爲QR%20codes文件並覆蓋它。相反,你需要添加一個獨特的標識符,以每個文件都上傳:

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

閱讀我們docs on creating references,它希望提供一些更多的信息。如果您正在尋找獨特的名字,請參閱this SO post

+0

仍然是覆蓋圖像 –

+0

你可以給我的代碼生成不同的字母數字字符串每次 –

+0

我做了,它在鏈接的stackoverflow後:http://stackoverflow.com/questions/37444685/store-files-with-獨特的隨機-名 –