错误:构造文件(URI)是未定义 [英] Error: The Constructor File(URI) is undefined

查看:502
本文介绍了错误:构造文件(URI)是未定义的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试着写拍照,数据和图像保存到SD卡,我可以读取图像数据,并输出一个活动。但是,我得到了showPhoto()方法的错误构造文件(URI)是不确定的。)。谁能帮助??

 进口的java.io.File;
进口java.text.SimpleDateFormat的;
进口java.util.Date;
进口java.util.Locale中;进口android.net.Uri;
进口android.os.Bundle;
进口android.os.Environment;
。进口的Andr​​oid preference preferenceManager.OnActivityResultListener;
进口android.provider.MediaStore;
进口android.app.Activity;
进口android.content.Intent;
进口android.graphics.Bitmap;
进口android.graphics.BitmapFactory;
进口android.graphics.drawable.BitmapDrawable;
进口android.graphics.drawable.Drawable;
进口android.util.Log;
进口android.view.Menu;
进口android.view.View;
进口android.view.View.OnClickListener;
进口android.widget.Button;
进口android.widget.ImageView;
进口android.widget.Toast;公共类CallCamera延伸活动{
    私有静态最后弦乐TAG =CallCamera;
    私有静态最终诠释CAPTURE_IMAGE_ACTIVITY_REQ = 0;    乌里了fileURI = NULL;
    ImageView的光象= NULL;    @覆盖
    保护无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.activity_call_camera);
        =光象(ImageView的)findViewById(R.id.photo_image);
        按钮callCameraButton =(按钮)findViewById(R.id.button_callcamera);
            callCameraButton.setOnClickListener(新View.OnClickListener(){                公共无效的onClick(查看视图){
                    意图I =新意图(MediaStore.ACTION_IM​​AGE_CAPTURE);
                    文件fil​​e = getOutputPhotoFile();
                    了fileURI = Uri.fromFile(getOutputPhotoFile());
                    i.putExtra(MediaStore.EXTRA_OUTPUT,fileURI所);
                    startActivityForResult(ⅰ,CAPTURE_IMAGE_ACTIVITY_REQ); //返回照片文件到活动时相机完成
                }
                    //采取SD卡上存储照片
                私人文件getOutputPhotoFile(){
                    文件目录=新File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),getPackageName());                    如果(!directory.exists()){
                        如果(!directory.mkdirs()){
                            Log.e(TAG,无法创建存储目录。);
                            返回null;
                        }
                    }                    //设置照片名称与标准图像目录上的SD卡链接和存储标准时间
                    字符串的timeStamp =新的SimpleDateFormat(yyyMMdd_HHmmss,Locale.ENGLISH).format(新的Date());
                    返回新的文件(directory.getPath()+文件分割符+IMG _+ +的timeStamp。JPG);
                }
            保护无效的onActivityResult(INT申请code,INT结果code,意图数据){
                如果(要求code == CAPTURE_IMAGE_ACTIVITY_REQ){
                    如果(结果code == RESULT_OK){
                        乌里photoUri = NULL;
                    如果(数据== NULL){
                        //确认图像保存
                        Toast.makeText(CallCamera.this,图像保存成功,Toast.LENGTH_LONG).show();
                        photoUri = fileURI所;
                    }其他{
                        photoUri = data.getData();
                        Toast.makeText(CallCamera.this,成像的成功保存:+ data.getData(),Toast.LENGTH_LONG).show();
                        }
                    photoUri = data.getData();
                    showPhoto(photoUri);                    }否则如果(结果code == RESULT_CANCELED){
                        Toast.makeText(CallCamera.this,已取消,Toast.LENGTH_SHORT).show();
                    }其他{
                        Toast.makeText(CallCamera.this!标注图像采集失败,Toast.LENGTH_LONG).show();
                    }
                }
            }            });
    }
    保护无效showPhoto(URI photoUri){
        文件镜像文件=新的文件(photoUri);
        如果(imageFile.exists()){
            可拉伸oldDrawable = photoImage.getDrawable();如果(!oldDrawable =空){((BitmapDrawable)oldDrawable).getBitmap()再循环();            }
        }        如果(imageFile.exists()){
            位图位图= BitmapFactory.de codeFILE(imageFile.getAbsolutePath());
            BitmapDrawable绘制=新BitmapDrawable(this.getResources(),位图);
            photoImage.setScaleType(ImageView.ScaleType.FIT_CENTER);;
            photoImage.setImageDrawable(绘制);        }    }


解决方案

尝试,而不是做这样的:

 文件镜像文件=新的文件(photoUri.getPath());

I'm trying to write an activity that takes a picture and saves the data and image to the sd card where I can read the image data and output it. But, I'm getting an error "Constructor File(Uri) is undefined.") in the showPhoto() method. Can anyone help??

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.preference.PreferenceManager.OnActivityResultListener;
import android.provider.MediaStore;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

public class CallCamera extends Activity {


    private static final String TAG = "CallCamera";
    private static final int CAPTURE_IMAGE_ACTIVITY_REQ = 0;

    Uri fileUri = null;
    ImageView photoImage = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_call_camera);
        photoImage=(ImageView) findViewById(R.id.photo_image);
        Button callCameraButton = (Button)findViewById(R.id.button_callcamera);
            callCameraButton.setOnClickListener(new View.OnClickListener(){

                public void onClick(View view){
                    Intent i= new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                    File file = getOutputPhotoFile();
                    fileUri=Uri.fromFile(getOutputPhotoFile());
                    i.putExtra(MediaStore.EXTRA_OUTPUT,  fileUri);
                    startActivityForResult(i, CAPTURE_IMAGE_ACTIVITY_REQ); //returns photo file to activity when camera is done
                }
                    //store photo taken on SD card
                private File getOutputPhotoFile() {
                    File directory = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),getPackageName());

                    if (!directory.exists()){
                        if(!directory.mkdirs()){
                            Log.e(TAG,"Failed to create storage directory.");
                            return null;
                        }
                    }

                    //set photo name with standard time linked and store on sdCard in standard picture directory
                    String timeStamp = new SimpleDateFormat("yyyMMdd_HHmmss",Locale.ENGLISH).format(new Date());
                    return new File(directory.getPath() + File.separator + "IMG_"+timeStamp+".jpg");
                }


            protected void onActivityResult (int requestCode, int resultCode, Intent data){
                if (requestCode==CAPTURE_IMAGE_ACTIVITY_REQ){
                    if(resultCode==RESULT_OK){
                        Uri photoUri = null;
                    if (data==null){
                        //confirming image save
                        Toast.makeText(CallCamera.this,  "Image saved successfully",  Toast.LENGTH_LONG).show();
                        photoUri=fileUri;
                    } else {
                        photoUri = data.getData();
                        Toast.makeText(CallCamera.this, "imaged saved successfully in: " + data.getData(), Toast.LENGTH_LONG).show();
                        }
                    photoUri = data.getData();
                    showPhoto(photoUri);

                    } else if (resultCode==RESULT_CANCELED) {
                        Toast.makeText( CallCamera.this,"Cancelled", Toast.LENGTH_SHORT).show();
                    } else {
                        Toast.makeText(CallCamera.this, "Callout for image capture failed!", Toast.LENGTH_LONG).show();
                    }
                }
            }

            });


    }
    protected void showPhoto(Uri photoUri) {
        File imageFile = new File(photoUri);
        if (imageFile.exists()){
            Drawable oldDrawable = photoImage.getDrawable();if(oldDrawable !=null) { ((BitmapDrawable)oldDrawable).getBitmap().recycle();

            }
        }

        if (imageFile.exists()){
            Bitmap bitmap = BitmapFactory.decodeFile(imageFile.getAbsolutePath());
            BitmapDrawable drawable = new BitmapDrawable(this.getResources(),bitmap);
            photoImage.setScaleType(ImageView.ScaleType.FIT_CENTER);;
            photoImage.setImageDrawable(drawable);

        }

    }

解决方案

Try doing this instead:

File imageFile = new File(photoUri.getPath());

这篇关于错误:构造文件(URI)是未定义的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆