簡體   English   中英

Android:圖像未顯示在來自相機的圖像視圖中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM