Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Android应用程序中获取并保存图像,然后为imageView检索图像?_Java_Android_Image_File - Fatal编程技术网

Java 如何在Android应用程序中获取并保存图像,然后为imageView检索图像?

Java 如何在Android应用程序中获取并保存图像,然后为imageView检索图像?,java,android,image,file,Java,Android,Image,File,我正在Android中构建一个简单的摄像头应用程序,在图像视图中显示它。我可以得到非常模糊的缩略图。因此我有一个为此制作的文件,然后它会给出文件的位置。当我检查它时,它的大小是0 kb,这是很好理解的。 我的任务是捕获图像并保存在mCurrentPhotoPath中,我应该能够在startActivityForResult()中的imageView中显示它 但在一次又一次地校准之前,应用程序崩溃了。 我知道这一行有问题 Uri photoURI = FileProvider.getUriFor

我正在Android中构建一个简单的摄像头应用程序,在
图像视图中显示它。我可以得到非常模糊的缩略图。因此我有一个为此制作的文件,然后它会给出文件的位置。当我检查它时,它的大小是0 kb,这是很好理解的。
我的任务是捕获图像并保存在
mCurrentPhotoPath
中,我应该能够在
startActivityForResult()中的
imageView
中显示它

但在一次又一次地校准之前,应用程序崩溃了。 我知道这一行有问题

 Uri photoURI = FileProvider.getUriForFile(MainActivity.this,"com.infolabs.photu", photoFile);
.I已更改
uriphotouri=FileProvider.getUriForFile(这是“com.example.android.FileProvider”,photoFile)
com.infolabs.photu
。但我不知道其中有什么错误。
请看看我的代码,我有位置,但它不会显示或工作,因为图像是0KB

错误日志:- 致命异常:主 进程:infolabs.photu,PID:21415 java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.content.res.XmlResourceParser android.content.pm.ProviderInfo.loadXmlMetaData(android.content.pm.PackageManager,java.lang.String)” 位于android.support.v4.content.FileProvider.parsePathStrategy(FileProvider.java:583) 位于android.support.v4.content.FileProvider.getPathStrategy(FileProvider.java:557) 位于android.support.v4.content.FileProvider.getUriForFile(FileProvider.java:399) 位于infolabs.photu.MainActivity$1.onClick(MainActivity.java:71) 在android.view.view.performClick上(view.java:5269) 在android.view.view$PerformClick.run(view.java:21556) 位于android.os.Handler.handleCallback(Handler.java:815) 位于android.os.Handler.dispatchMessage(Handler.java:104) 位于android.os.Looper.loop(Looper.java:207) 位于android.app.ActivityThread.main(ActivityThread.java:5776) 位于java.lang.reflect.Method.invoke(本机方法) 在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:789) 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)
04-17 16:56:15.085 21415-21425/infolabs.photu I/System:finalizerdamon:finalize objects=65

或者,您可以尝试使用毕加索库,它非常简单,可以解决大多数与处理图像相关的问题。
你可以在这里找到:

或者,你可以试试毕加索图书馆,它非常简单,可以解决你处理图像的大部分问题。
您可以在这里找到它:

从相机捕获图像并将其保存到SD卡:

cameraBtn.setOnClickListener(new View.OnClickListener()
 {
                            @Override
                            public void onClick(View v) 
{

         Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

                    try {

                        File f = createImageFile();//createImageFile() is added.
                        if (f != null) {
                            intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
                           startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
                        }
                    } catch (IOException IOE) {
                        IOE.printStackTrace();
                    }

                            }
                        });


         private File createImageFile() throws IOException {

                String imageFileName = "image";
                String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
                imageFileName = imageFileName + timeStamp.toString();
                File albumF = getStorageDir();
                File imageF = File.createTempFile(imageFileName, ".jpg", albumF);
                return imageF;

            }

         private File getStorageDir() {
                File storageDir = null;
                storageDir = new File(Environment.getExternalStorageDirectory(), "/MyApp" );
                if (storageDir != null) {
                    if (!storageDir.mkdirs()) {
                        if (!storageDir.exists()) {
                            Log.d("CameraSample", "failed to create directory");
                            return null;
                        }
                    }
                }
                return storageDir;
            }



        private File getImageFile() {
            String Path = Environment.getExternalStorageDirectory() + "/MyApp";
            File f = new File(Path);
            File imageFiles[] = f.listFiles();

            if (imageFiles == null || imageFiles.length == 0) {
                return null;
            }

            File lastModifiedFile = imageFiles[0];
            for (int i = 1; i < imageFiles.length; i++) {
                if (lastModifiedFile.lastModified() < imageFiles[i].lastModified()) {
                    lastModifiedFile = imageFiles[i];
                }
            }
            return lastModifiedFile;
        }
在menifest文件中添加权限:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
 <uses-permission android:name="android.permission.CAMERA" />

从摄像头捕获图像并将其保存到SD卡:

cameraBtn.setOnClickListener(new View.OnClickListener()
 {
                            @Override
                            public void onClick(View v) 
{

         Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

                    try {

                        File f = createImageFile();//createImageFile() is added.
                        if (f != null) {
                            intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
                           startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
                        }
                    } catch (IOException IOE) {
                        IOE.printStackTrace();
                    }

                            }
                        });


         private File createImageFile() throws IOException {

                String imageFileName = "image";
                String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
                imageFileName = imageFileName + timeStamp.toString();
                File albumF = getStorageDir();
                File imageF = File.createTempFile(imageFileName, ".jpg", albumF);
                return imageF;

            }

         private File getStorageDir() {
                File storageDir = null;
                storageDir = new File(Environment.getExternalStorageDirectory(), "/MyApp" );
                if (storageDir != null) {
                    if (!storageDir.mkdirs()) {
                        if (!storageDir.exists()) {
                            Log.d("CameraSample", "failed to create directory");
                            return null;
                        }
                    }
                }
                return storageDir;
            }



        private File getImageFile() {
            String Path = Environment.getExternalStorageDirectory() + "/MyApp";
            File f = new File(Path);
            File imageFiles[] = f.listFiles();

            if (imageFiles == null || imageFiles.length == 0) {
                return null;
            }

            File lastModifiedFile = imageFiles[0];
            for (int i = 1; i < imageFiles.length; i++) {
                if (lastModifiedFile.lastModified() < imageFiles[i].lastModified()) {
                    lastModifiedFile = imageFiles[i];
                }
            }
            return lastModifiedFile;
        }
在menifest文件中添加权限:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
 <uses-permission android:name="android.permission.CAMERA" />


如果它崩溃,那么也发布你的崩溃日志。你能在“Uri photoURI=FileProvider.getUriForFile(MainActivity.this,“com.infolabs.photu”,photoFile);”添加一个调试点,然后手动打开该文件并检查文件的大小。是的,我做了,它显示你应该使用
Uri.fromFile(photoFile)
如果它崩溃,那么也发布你的崩溃日志。你能在“Uri photoURI=FileProvider.getUriForFile(main activity.this,“com.infolabs.photu”,photoFile);”添加一个调试点,然后手动打开文件并检查文件的大小。是的,我做了,它显示你应该使用
Uri.fromFile(photoFile)
Sir,我的问题是先捕获图像并正确保存。然后我可以让picaso从SD卡加载。然后@VivekGautam,如果你可以发布崩溃日志,那么找出问题会很有帮助。先生,我的问题是首先捕获图像并正确保存。然后我可以让picaso从SD卡加载。然后@VivekGautam,如果您可以发布崩溃日志,那么找出问题将很有帮助。