2017-04-25 21 views
-3

私は、ユーザーが写真を撮って、その後、それらの位置にマーカーを配置することを可能にしようとしています:Android - 方法を開始するにはどうすればよいですか?

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); 
     } 


      public void UploadPicture(Bitmap bitmap) { 

       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())); 


      ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
      bitmap.compress(Bitmap.CompressFormat.JPEG, 20, baos); 
      byte[] data = baos.toByteArray(); 
      UploadTask uploadTask = mountainsRef.putBytes(data); 
        uploadTask.addOnFailureListener(new OnFailureListener() { 
         @Override 
         public void onFailure(@NonNull Exception exception) { 
          // Handle unsuccessful uploads 
          Toast.makeText(getApplicationContext(), exception.getMessage(), Toast.LENGTH_LONG).show(); 
         } 
        }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 
         @Override 
         public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 
          Toast.makeText(getApplicationContext(), "Marked!", Toast.LENGTH_LONG).show(); 
         } 
      }); 

      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); 




     } 
    }); 

私はそれがすべてのアクションを行うことができますので、メソッドのUploadPictureを開始する必要がありますが、どのように私はそれが入手できますか開始?現在のところ、アプリは写真を撮るだけですが、アップロードはしません。助けてくれてありがとう。

+0

StackOverflowは初心者のためのチュートリアルフォーラムではありません。同じコードを何度も何度も投稿し続けるようです:[ここ](http://stackoverflow.com/q/43537625/1235698)、[ここ](http://stackoverflow.com/q/43580214/1235698) )、[ここ](http://stackoverflow.com/q/43537625/1235698)。いくつかのチュートリアルを**最初に**行ってから、質問に戻ってください。 –

答えて

0

UploadPictureのメソッドを完全に削除し、再度onClickListenerの外に置きます。

それは次のようになります。あなたは、これは絵が正常に行われているかどうかを確認しますあなたの活動にごonClickListenerの外のメソッドをオーバーライドする必要がその後

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); 
    } 

}); 
public void UploadPicture(Bitmap bitmap) { 
    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())); 


    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    bitmap.compress(Bitmap.CompressFormat.JPEG, 20, baos); 
    byte[] data = baos.toByteArray(); 
    UploadTask uploadTask = mountainsRef.putBytes(data); 
      uploadTask.addOnFailureListener(new OnFailureListener() { 
       @Override 
       public void onFailure(@NonNull Exception exception) { 
        // Handle unsuccessful uploads 
        Toast.makeText(getApplicationContext(), exception.getMessage(), Toast.LENGTH_LONG).show(); 
       } 
      }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 
       @Override 
       public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 
        Toast.makeText(getApplicationContext(), "Marked!", Toast.LENGTH_LONG).show(); 
       } 
    }); 

    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); 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    switch (requestCode) { 
    case TAKE_PICTURE: 
     if (resultCode == Activity.RESULT_OK) { 
      Uri selectedImage = imageUri; 
      getContentResolver().notifyChange(selectedImage, null); 
      ImageView imageView = (ImageView) findViewById(R.id.ImageView); 
      ContentResolver cr = getContentResolver(); 
      Bitmap bitmap; 
      try { 
       bitmap = android.provider.MediaStore.Images.Media 
       .getBitmap(cr, selectedImage); 

       imageView.setImageBitmap(bitmap); 
       Toast.makeText(this, selectedImage.toString(), 
         Toast.LENGTH_LONG).show(); 
       UploadPicture(bitmap); // ADD THIS HERE 
      } catch (Exception e) { 
       Toast.makeText(this, "Failed to load", Toast.LENGTH_SHORT) 
         .show(); 
       Log.e("Camera", e.toString()); 
      } 
     } 
    } 
} 

ここから取得:Android camera intent

私はこれをテストしていませんが、あなたはアイデアを得ることを願っています。

+0

どうすればUploadPictureを開始できますか? – Mozy

+0

@Mozyこれはコード内にあります。 – Denny

+0

私はそれを見ていますが、UploadPictureは座標にアクセスするためにonLocationChangedメソッドにあるため、onActivityResultはUploadPictureにアクセスできませんが、同時にonActivityResultにはエラーが発生しますinsideLocationChangedのとき。これを修正するにはどうすればいいですか? – Mozy

関連する問題