-1

我想让用户在他们的位置放置一个标记,然后拍照。 然后将图片上传到他们的坐标和firebase Uid下。 这里是我当前的代码:Android-如何将图片从Google地图上传到Firebase?

final LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude()); 




    ivcam.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
      startActivityForResult(intent, CAMERA_REQUEST); 
       String userUid = FirebaseAuth.getInstance().getCurrentUser().getUid(); 
       StorageReference storageRef= FirebaseStorage.getInstance().getReference(); 
       StorageReference mountainsRef = storageRef.child("uploads/") 
         .child(String.valueOf(latLng)) 
         .child(userUid) 
         .child(String.valueOf(System.currentTimeMillis())); 


      final MarkerOptions markerOptions = new MarkerOptions(); 
      markerOptions.position(latLng); 
      markerOptions.title(String.valueOf(latLng)); 
      markerOptions.draggable(false); 
      markerOptions.icon(BitmapDescriptorFactory.fromResource(R.drawable.marker3)); 
      mCurrLocationMarker = mMap.addMarker(markerOptions); 
     } 
    }); 

有没有任何错误,但是当我拍照,没事就火力地堡储存显示出来。谢谢您的帮助。

+0

显示你在哪里上传图像 –

+0

代码是否那里没有上传图片的代码?对不起,新的android – Mozy

+0

检查我的答案,下面希望它有助于:) –

回答

0

有在火力

1)存储图像的两种方法是将图像转换为字符串,然后保存该字符串到您的节点。像这样

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos); 
    String imageEncoded = Base64.encodeToString(baos.toByteArray(), Base64.DEFAULT); 
    DatabaseReference ref = FirebaseDatabase.getInstance() 
      .getReference(Constants.FIREBASE_CHILD_RESTAURANTS) 
      .child(FirebaseAuth.getInstance().getCurrentUser().getUid()) 
      .child(mRestaurant.getPushId()) 
      .child("imageUrl"); 
    ref.setValue(imageEncoded); 

2)将图片直接上传到firebase存储。

private void uploadFile(Bitmap bitmap) { 
     FirebaseStorage storage = FirebaseStorage.getInstance(); 
     StorageReference storageRef = storage.getReferenceFromUrl("Your url for storage"); 
     StorageReference mountainImagesRef = storageRef.child("images/" + chat_id + Utils.getCurrentTimeStamp() + ".jpg"); 
     ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
     bitmap.compress(Bitmap.CompressFormat.JPEG, 20, baos); 
     byte[] data = baos.toByteArray(); 
     UploadTask uploadTask = mountainImagesRef.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. 
       Uri downloadUrl = taskSnapshot.getDownloadUrl(); 
       sendMsg("" + downloadUrl, 2); 
       Log.d("downloadUrl-->", "" + downloadUrl); 
      } 
     }); 

    } 

对于这一点,你必须添加依赖关系

compile 'com.google.firebase:firebase-storage:9.0.2' 
+0

非常感谢!但是哪一个更可取? – Mozy

+0

我会说上传图像到存储,正如有人说,我们不应该在数据库上施加太多的负担:)如果它帮助你然后接受答案并评估它。 –

+0

好吧,谢谢,最后一个问题,它说它无法解决Utils? – Mozy