2016-11-14 4 views
0

이 클래스에서 qRcode를 생성하고이를 firebase 저장소에 저장하면 모든 것이 잘 작동하지만 qrcode가 동일한 이름, 즉 "QR 코드"로 저장 될 때마다 문제가 발생합니다 .I Firebase Storage의 QRCodes 폴더에 다른 사용자의 다른 이름으로 qRcode를 저장하려고합니다.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- 유일한 임의의 이름 –