-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