2017-04-17 57 views
0

我正在構建一個簡單的相機應用程序在Android中顯示它在imageView。我可以得到非常模糊的縮略圖。所以我有一個製作的文件,然後它給了我的文件的位置。當我檢查它時,它是0 kb,這是很好理解。 我的任務是捕獲圖像並保存在mCurrentPhotoPath,我應該能夠在我imageViewstartActivityForResult()如何在位置獲取圖像並在Android應用程序中檢索imageView?

顯示它不過應用崩潰連連Caling在此之前之前。 我知道的東西是越野車在這條線

Uri photoURI = FileProvider.getUriForFile(MainActivity.this,"com.infolabs.photu", photoFile); 

。我已經改變了Uri photoURI = FileProvider.getUriForFile(this, "com.example.android.fileprovider",photoFile);com.infolabs.photu。但我不能讓什麼是錯的吧。
請看看我的代碼,我有位置URL的位置,但它不會顯示或工作的形象是0KB

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    b = (Button) findViewById(R.id.captureimage); 
    imageView = (ImageView) findViewById(R.id.imageView); 


    b.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 


      if (takePictureIntent.resolveActivity(getPackageManager()) != null) 
      { 
       // Create the File where the photo should go 
       File photoFile = null; 
       try 
       { 
        photoFile = createImageFile(); 
        Toast.makeText(MainActivity.this,mCurrentPhotoPath,Toast.LENGTH_LONG).show(); 
       } 
       catch (IOException ex) 
       { 
        Toast.makeText(MainActivity.this,"the file is not created ",Toast.LENGTH_SHORT).show(); 
       } 

       if (photoFile != null) 
       { 
        //this Uri does not working properly 
        Uri photoURI = FileProvider.getUriForFile(MainActivity.this,"com.infolabs.photu", photoFile); 
        takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI); 
        startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO); 
       } 
      } 
     } 
    }); 
} 

錯誤日誌: - 致命異常:主要 過程:infolabs 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:58 3) at android.support.v4.content.FileProvider.getPathStrategy(FileProvider.java:557) at android.support.v4.content.FileProvider.getUriForFile(FileProvider.java:399) at infolabs.photu.MainActivity $ 1 .onClick(MainActivity.java:71) at android.view.View.performClick(View.java:5269) at android.view.View $ PerformClick.run(View.java:21556) at android.os.Handler .handleCallback(Handler.java:815) at android.os.Handler.dispatchMessage(Handler.java:104) at android.os.Looper.loop(Looper.java:207) at android.app.ActivityThread.main (ActivityThread.java:5776) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:789) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:679) 04-17 16:56:15.085 21415-21425/infolabs.photu I /系統:FinalizerDaemon:最終確定的對象= 65

+0

如果它崩潰,那麼也發佈你的崩潰日誌。 –

+0

您可以在「Uri photoURI = FileProvider.getUriForFile(MainActivity.this,」com.infolabs.photu「,photoFile)中添加調試點;」並手動打開文件並檢查文件的大小。 – Sarker

+0

是的,我沒有顯示0kb –

回答

0

或者,你可以嘗試畢加索庫,這是很容易並將解決您在處理圖像方面的大部分問題。 你可以在這裏找到:http://square.github.io/picasso/

+0

先生,我的問題是首先捕捉圖像並妥善保存,然後我可以從sdcard加載圖像。 –

+0

然後@VivekGautam,如果你可以發佈崩潰日誌,那麼找出問題會很有幫助。 –

1

捕捉來自攝像頭的圖像,並將其保存到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; 
     } 

//覆蓋從活動的方法,讀取保存圖像文件,並顯示在ImageView的:

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) { 
      if (resultCode == RESULT_OK) { 

       File imageFile = getImageFile(); 

Bitmap bitmap = BitmapFactory.decodeFile(imageFile.getAbsolutePath()); 
        mImageView.setImageBitmap(bitmap); 

}}} 

添加權限在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" /> 
相關問題