1

我試圖剪下一個image(我從畫廊中選擇或從相機中取出)並通過它到另一個activity,它應該將image上傳到我的Firebase存儲。Image-Crop-Activity不會將Image-Uri發送到接收活動(Android-Image-Cropper)

起初(沒有圖像裁剪)一切都很順利。我能夠通過並上傳image ...但在將圖像裁剪代碼添加到我的onActivityResult之後,它只是在按下「裁剪」後關閉imageCropActivity並跳回到MainActivity。

我試過了,但我真的不知道爲什麼它會這麼做。也許我錯過了一些東西。有任何想法嗎?

對於我使用這個libary影像裁剪:https://github.com/ArthurHub/Android-Image-Cropper

主要活動

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 

     mImageUri_gallery = data.getData(); 
     mImageUri_camera = data.getData(); 


     if (requestCode == 100 && resultCode == RESULT_OK) { 
      CropImage.activity(mImageUri_gallery) 
        .setGuidelines(CropImageView.Guidelines.ON) 
        .start(this); 
      if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) { 
       CropImage.ActivityResult result = CropImage.getActivityResult(data); 
       if (resultCode == RESULT_OK) { 
        Uri resultUriGallery = result.getUri(); 
        Intent intentGallery = new Intent(MainActivity.this, ImagePostActivity.class); 
        intentGallery.putExtra("image-uri", resultUriGallery.toString()); 
        startActivity(intentGallery); 
       } else if (resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE) { 
        Exception error = result.getError(); 
       } 
      } 

     } else if (resultCode != RESULT_CANCELED && data != null) { 
      if (requestCode == 200 && resultCode == RESULT_OK) { 
       CropImage.activity(mImageUri_camera) 
         .setGuidelines(CropImageView.Guidelines.ON) 
         .start(this); 
       if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) { 
        CropImage.ActivityResult result = CropImage.getActivityResult(data); 
        if (resultCode == RESULT_OK) { 
         Uri resultUriCamera = result.getUri(); 
         Intent intentCamera = new Intent(MainActivity.this, ImagePostActivity.class); 
         intentCamera.putExtra("image-uri", resultUriCamera.toString()); 
         startActivity(intentCamera); 
        } else if (resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE) { 
         Exception error = result.getError(); 
        } 
       } 

      } 
     } 


    } 

ImagePostActivity

public class ImagePostActivity extends AppCompatActivity { 

    public static TextView txt_btn_post; 
    public static EditText mPostTitle; 
    public static ImageView imagePostPreview; 
    private StorageReference mStorage; 
    private DatabaseReference mDatabase; 
    private ProgressDialog mProgress; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_image_post); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     getSupportActionBar().setHomeButtonEnabled(true); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

     mStorage = FirebaseStorage.getInstance().getReference(); 
     mDatabase = FirebaseDatabase.getInstance().getReference().child("Test_Stream_Uploads"); 
     mProgress = new ProgressDialog(this); 
//  mPostTitle = (EditText) findViewById(R.id.mPostTitle); 
     imagePostPreview = (ImageView) findViewById(R.id.imagePostPreview); 
     Intent intent = getIntent(); 

     mImageUri_gallery = Uri.parse(intent.getStringExtra("image-uri")); 
     imagePostPreview.setImageURI(mImageUri_gallery); 
     mImageUri_camera = Uri.parse(intent.getStringExtra("image-uri")); 
     imagePostPreview.setImageURI(mImageUri_camera); 

     txt_btn_post = (TextView) findViewById(R.id.txt_btn_post); 
     txt_btn_post.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       startPosting(); 
      } 
     }); 


    } 

    private void startPosting() { 

     mProgress.setMessage("Bild wird hochgeladen..."); 
     mProgress.show(); 
     if (mImageUri_gallery != null) { 
      StorageReference filepath = mStorage.child("Stream_Image").child(mImageUri_gallery.getLastPathSegment()); 
      filepath.putFile(mImageUri_gallery).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 
       @Override 
       public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 
        Uri downloadUrl = taskSnapshot.getDownloadUrl(); 
        Intent intent = new Intent(getBaseContext(), MainActivity.class); 
        DatabaseReference newPost = mDatabase.push(); 
        newPost.child("image").setValue(downloadUrl.toString()); 
        mProgress.dismiss(); 
        startActivity(intent); 
       } 
      }); 
     } 


    } 
} 

回答

0

我也在積極地使用這個工具,我其實並沒有真正瞭解你的代碼,但我可以關閉呃你是我如何工作的例子。如果你仔細研究它,你可以輕鬆地瞭解並理解這個想法。它適用於從畫廊拍攝的圖像。

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if(requestCode == GALLERY_REQUEST && resultCode == RESULT_OK){ 
     Uri imageUri = data.getData(); 
     CropImage.activity(imageUri) 
       .setGuidelines(CropImageView.Guidelines.ON) 
       .setAspectRatio(144,81) 
       .start(this); 
    } 
    if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) { 
     CropImage.ActivityResult result = CropImage.getActivityResult(data); 
     if (resultCode == RESULT_OK) { 
      Uri resultUri = result.getUri(); 
      ib_image.setImageURI(resultUri); 
     } else if (resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE) { 
      Exception error = result.getError(); 
     } 
    } 
} 

如果要將此應用到您剛剛從相機拍攝的圖像,你需要創建自己的URI,這是一個有點很長的路要走,但它在Android文檔:(https://developer.android.com/training/camera/photobasics.html#TaskPhotoView)解釋說,這我在這裏討論解釋:Image capture with camera & upload to Firebase (Uri in onActivityResult() is null)

+0

謝謝!我會試試看,並告訴你它是否適合我 – Ron

+0

@Ron是否有效? –

相關問題