2017-09-27 29 views
0

Ich muss das Bild von der Kamera und Galerie zu Firebase speichern. In meinem Projekt Upload von Galerie funktioniert, aber wenn ich versuche, von der Kamera zu laden passiert nichts. Wenn Sie auf die Schaltfläche klicken, wählen Sie zwischen Galerie oder Kamera. Wenn Sie ein Bild aufnehmen oder ein Bild aus einer Galerie auswählen, bekomme ich in der Bildansicht ein Bild. Dann klicke ich auf Speichern und wenn das Bild aus der Galerie ist, wird es gespeichert und erstellt Kind in der Datenbank, aber wenn das Bild von der Kamera ist, wird es nicht funktionieren. Gibt es eine Lösung für dieses Problem?Bild der Kamera auf firebase hochladen

MainActivity.java

public class MainActivity extends AppCompatActivity { 
    private Uri mImageUri = null; 
    private Button btn,mSubmitBtn; 
    private ImageView imageview; 
    private int GALLERY = 1, CAMERA = 2; 

    private StorageReference mStorage; 
    private DatabaseReference mDatabase; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     btn = (Button) findViewById(R.id.btn); 
     mSubmitBtn = (Button)findViewById(R.id.submit); 
     imageview = (ImageView) findViewById(R.id.iv); 

     mStorage = FirebaseStorage.getInstance().getReference(); 
     mDatabase = FirebaseDatabase.getInstance().getReference().child("Upload"); 
     btn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       showPictureDialog(); 
      } 
     }); 

     mSubmitBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       startPosting(); 
      } 
     }); 

    } 

    private void showPictureDialog(){ 
     AlertDialog.Builder pictureDialog = new AlertDialog.Builder(this); 
     pictureDialog.setTitle("Select Action"); 
     String[] pictureDialogItems = { 
       "Select photo from gallery", 
       "Capture photo from camera" }; 
     pictureDialog.setItems(pictureDialogItems, 
       new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         switch (which) { 
          case 0: 
           choosePhotoFromGallary(); 
           break; 
          case 1: 
           takePhotoFromCamera(); 
           break; 
         } 
        } 
       }); 
     pictureDialog.show(); 
    } 

    public void choosePhotoFromGallary() { 
     Intent galleryIntent = new Intent(Intent.ACTION_PICK, 
       android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 

     startActivityForResult(galleryIntent, GALLERY); 
    } 

    private void takePhotoFromCamera() { 
     Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
     startActivityForResult(intent, CAMERA); 
    } 

    //////////////////////////// 
    private void startPosting(){ 

     if (mImageUri !=null){ 

      StorageReference filepath = mStorage.child("Images").child(mImageUri.getLastPathSegment()); 


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

        Uri downloadUrl = taskSnapshot.getDownloadUrl(); 

        DatabaseReference newPost = mDatabase.push();//push kreira uniq random id 


        newPost.child("image").setValue(downloadUrl.toString()); 

       } 
      }); 
     } 
    } 

    //////////////////////// 
    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 

     super.onActivityResult(requestCode, resultCode, data); 
     if (resultCode == this.RESULT_CANCELED) { 
      return; 
     } 
     if (requestCode == GALLERY) { 
      if (data != null) { 
       mImageUri = data.getData(); 
       imageview.setImageURI(mImageUri); 
      } 

     } else if (requestCode == CAMERA) { 
      Bitmap thumbnail = (Bitmap) data.getExtras().get("data"); 
      imageview.setImageBitmap(thumbnail); 
      imageview.setImageURI(mImageUri); 

     } 
    } 


} 
+0

geschieht dies auf Naugat und über Android-Versionen? –

+0

ja, auf Nougat-Version –

Antwort

0

stand ich vor dem gleichen Problem, und dies geschieht meist auf Kitkat und unteren version.When das Bild geklickt wird versuchen, die Bitmap-Datei direkt als sich folgende Weise zu tun,

Bitmap thumbnail = (Bitmap) data.getExtras().get("data"); 
     ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
     thumbnail.compress(Bitmap.CompressFormat.JPEG, 90, bytes); 
     File destination = new File(Environment.getExternalStorageDirectory(), 
       System.currentTimeMillis() + ".jpg"); 
     FileOutputStream fo; 
     try { 
      destination.createNewFile(); 
      fo = new FileOutputStream(destination); 
      fo.write(bytes.toByteArray()); 
      fo.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     imageview.setImageBitmap(thumbnail); 

auch in der Manifest-Datei sicherstellen, dass Sie die folgende Berechtigung zu erklärt haben, zusammen mit dem READ_EXTERNAL

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

Grund für dieses Problem ist, weil Android 4.4 (KitKat) geändert hat, wie Berechtigungen auf der SD-Karte behandelt werden. Daher empfiehlt es sich, ein eigenes Verzeichnis auf der SD-Karte zu erstellen, das alle Dateien verarbeitet, die Ihre App schreiben muss. Dies funktioniert auch für alle höheren Versionen.

Hoffe, das hilft.

Verwandte Themen