当前位置: 首页 > 知识库问答 >
问题:

捕获后上传图像-Android

周作人
2023-03-14
public class WaterConsumptionPage extends Fragment {

private ImageView imageView;
private Button capture, upload;
static final int CAM_REQUEST = 1;
private StorageReference mStorageRef;
private FirebaseAuth mAuth;
private DatabaseReference dbRef;
private ProgressDialog mProgress;
private Bitmap photo;
private FirebaseUser user;
private Uri uri;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.water_consumption_page, container, false);

    mStorageRef = FirebaseStorage.getInstance().getReference();
    mAuth = FirebaseAuth.getInstance();
    dbRef = FirebaseDatabase.getInstance().getReference();
    user = mAuth.getCurrentUser();

    imageView = rootView.findViewById(R.id.water_image);
    capture = rootView.findViewById(R.id.water_capture);
    upload = rootView.findViewById(R.id.water_upload);

    upload.setEnabled(false);

    capture.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent cam_intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            if(cam_intent.resolveActivity(getActivity().getPackageManager()) != null){
                startActivityForResult(cam_intent, CAM_REQUEST);
            }
        }
    });

    mProgress = new ProgressDialog(getContext());
    upload.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mProgress.setMessage("Uploading Image...");
            mProgress.show();

            StorageReference filepath = mStorageRef.child("Photos").child(user.getUid()).child("Water").child(uri.getLastPathSegment());
            filepath.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                    mProgress.dismiss();
                    Toast.makeText(getContext(), "Upload Finished...", Toast.LENGTH_LONG).show();
                    Intent i = new Intent(getContext(), WaterConsumption.class);
                    startActivity(i);
                }
            }).addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    mProgress.dismiss();
                    Toast.makeText(getContext(), "Upload has stopped.", Toast.LENGTH_LONG).show();
                }
            });
        }
    });

    return rootView;
}

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

    if(requestCode == CAM_REQUEST && data != null){
        upload.setEnabled(true);
        uri = data.getData();
        Bundle extras = data.getExtras();
        photo = (Bitmap) extras.get("data");
        imageView.setImageBitmap(photo);

    }
}
StorageReference filepath = mStorageRef.child("Photos").child(user.getUid()).child("Water").child(uri.getLastPathSegment());
filepath.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
        @Override
        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
               mProgress.dismiss();
               Toast.makeText(getContext(), "Upload Finished...", Toast.LENGTH_LONG).show();
               Intent i = new Intent(getContext(), WaterConsumption.class);
                    startActivity(i);
                }
        }).addOnFailureListener(new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                  mProgress.dismiss();
                  Toast.makeText(getContext(), "Upload has stopped.", Toast.LENGTH_LONG).show();
              }
});

我想首先捕获图像并将其查看到ImageView,然后单击upload将图像保存到FireBase。

共有1个答案

司徒志
2023-03-14

您应该删除这行代码:

super.onActivityResult(requestCode, resultCode, data);

因为我认为这一行会导致data.getIntent()没有返回任何内容。

如果可以,还应该检查resultcode。这里有一个例子:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == CAM_REQUEST && resultCode == RESULT_OK) {
       Uri uri = data.getData();
    } 
  }
 类似资料:
  • 我正在开发一个简单的博客应用程序,允许用户将照片从手机图库和描述上传到Firebase服务器。我正在尝试修改我的当前项目,以允许用户从照相机捕获照片并将其上载到firebase服务器。 目前,我能够将我捕获的图像显示到Image按钮中,但是我无法将我的图像发布到Firebase服务器(提交发布按钮不会对我的点击功能做出反应)。 我怀疑我的startPosting()函数中有错误,或者我没有正确编码

  • 我正在尝试用相机拍照并上传到Firebase。我使用AlertDialog询问用户是否想要使用相机或从图库中选择图像。我可以用相机拍照,但是当我试图上传图像时,它说找不到图像。 以下是我的图像选择方法: 下面是我上传图片的方法: 提前感谢任何帮助的朋友。

  • 我在我的屏幕上有四个图像视图,从相机中捕获图像并显示在其中,现在我想将这些图像上传到服务器上。因此,我使用了下面的代码来获取它们的路径,但它通过了异常。是否有可能从摄像机拍摄的图像视图将图像上传到服务器(无需将图像存储到内存中)。

  • 我想知道是否有人试图使用类固醇应用程序拍摄图像,并通过api将其发布到后端? 我在他们自己的文档中发现的唯一关于图像处理的事情是如何捕获图像以及如何以base64编码保存它们,但是我如何使用base64编码的图像,并且是否可以通过api发布它们? 代码示例: $ scope . start capture = function(){ navigator . Camera . get picture

  • 有没有办法用java捕获双击鼠标事件后的图像?我只能在鼠标释放双击事件时捕获图像。但捕获图像不是双击事件后的图像。

  • 我正在尝试使用html2canvas将div捕获到图像中。我有一个带滚动条的div。我想把这个div元素转换成image。当运行html2canvas时,它只捕获屏幕的可见部分,截断从滚动中隐藏的所有内容。设置“高度、宽度”属性没有影响。我使用的是html2canvas版本0.4。1. 感谢帮助。