[英]Android : Image is not display in Image-view From Camera
我正在實施相機應用程序。 我從相機捕獲圖像並將其保存到 DCIM 文件夾中,然后將該圖像顯示到 ImageView 中。該圖像已成功存儲到 DCIM 文件夾中,但未以全屏尺寸顯示在 ImageView 中。 我的應用程序崩潰並出現錯誤
Uri selectedImageUri = data.getData(); 是空對象引用。
這是我的代碼
public class MainActivity extends ActionBarActivity {
Button b1,b2;
ImageView iv;private File output=null;int CONTENT_REQUEST =9999;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b1=(Button)findViewById(R.id.button);
iv=(ImageView)findViewById(R.id.imageView);
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
File dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
output = new File(dir, "CameraContentDemo.jpeg");
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(output));
startActivityForResult(intent, CONTENT_REQUEST);
}
});
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
// Bitmap bmp = BitmapFactory.decodeFile(urImageFilePath);
if (requestCode == CONTENT_REQUEST)
{
if (resultCode == RESULT_OK)
{
try{
Uri selectedImageUri = data.getData();
Log.e("selectedImageUri "," = " + selectedImageUri);
if(selectedImageUri!=null){
Bitmap bmp= BitmapFactory.decodeStream(getContentResolver().openInputStream(selectedImageUri));
Log.e("bmp "," = " + bmp);
iv.setImageBitmap(bmp);
Log.e("bmp ", " Displaying Imageview WIth Bitmap !!!! = ");
}
}
catch (FileNotFoundException fe)
{
fe.printStackTrace();
}
}}
這是 Menifest.xml 文件中的相機權限
<uses-feature android:name="android.hardware.camera"/>
<uses-permission android:name="android.permission.CAMERA"/>
這是我的 Logcat 錯誤
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=9999, result=-1, data=null} to activity {com.example.tazeen.demo3/com.example.tazeen.demo3.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.net.Uri android.content.Intent.getData()' on a null object reference
at android.app.ActivityThread.deliverResults(ActivityThread.java:3568)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:3611)
at android.app.ActivityThread.access$1400(ActivityThread.java:147)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1345)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.net.Uri android.content.Intent.getData()' on a null object reference
at com.example.tazeen.demo3.MainActivity.onActivityResult(MainActivity.java:55)
at android.app.Activity.dispatchActivityResult(Activity.java:6135)
at android.app.ActivityThread.deliverResults(ActivityThread.java:3564)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:3611)
at android.app.ActivityThread.access$1400(ActivityThread.java:147)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1345)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)
11-23 15:10:34.367 647-1092/? E/ActivityManager﹕ Invalid thumbnail dimensions: 384x384
這是因為從相機意圖獲取的位圖不會出現在data.getData()
,如果您選擇了一個已經在磁盤中的文件,那么data.getData()
將是文件資源的 URI。 從 Camera Activity 中獲取的圖片不會被存儲,而是作為 Bitmap 保存在內存中,並在 Intent 的 extras 中傳遞給父 Activity 的 onActivityResult,獲取此位圖的方式是這樣的
data.getExtras().get("data");
所以你的代碼的變化是這樣的,
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
// Bitmap bmp = BitmapFactory.decodeFile(urImageFilePath);
if (requestCode == CONTENT_REQUEST)
{
if (resultCode == RESULT_OK)
{
try{
Uri selectedImageUri = data.getData();
Log.e("selectedImageUri "," = " + selectedImageUri);
if(selectedImageUri!=null){
Bitmap bmp= BitmapFactory.decodeStream(getContentResolver().openInputStream(selectedImageUri));
Log.e("bmp "," = " + bmp);
iv.setImageBitmap(bmp);
Log.e("bmp ", " Displaying Imageview WIth Bitmap !!!! = ");
} else {
// If selectedImageUri is null check extras for bitmap
Bitmap bmp = (Bitmap) data.getExtras().get("data");
iv.setImageBitmap(bmp);
}
}
catch (FileNotFoundException fe)
{
fe.printStackTrace();
}
}}
編輯 1
這就是你如何意圖啟動相機活動以獲得結果,
final int CHOOSE_CAMERA = 232;
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CHOOSE_CAMERA);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.