尝试从Android的画廊或相机获得的图像 [英] trying to get an image from gallery or camera in android

查看:95
本文介绍了尝试从Android的画廊或相机获得的图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在无论从画廊或camera.The画廊一部分ImageView的一个在线教程加载图像工作正常,但是从onactvitiyresult检索到的摄像头部分的力量closes.The数据显示为空。

在code:

 包com.example.cameragallerypro;

进口android.net.Uri;
进口android.os.Bundle;
进口android.provider.MediaStore;
进口android.app.Activity;
进口android.content.Intent;
进口android.database.Cursor;
进口android.graphics.Bitmap;
进口android.util.Log;
进口android.view.Menu;
进口android.view.View;
进口android.view.View.OnClickListener;
进口android.widget.Button;
进口android.widget.ImageView;
进口android.widget.Toast;

公共类MainActivity延伸活动{

     乌里selectedImageUri;
      字符串selectedPath;
      ImageView的preVIEW;
     @覆盖
     保护无效的onCreate(包savedInstanceState){
      super.onCreate(savedInstanceState);
      的setContentView(R.layout.activity_main);
      按钮B =(按钮)findViewById(R.id.bGallery);
      按钮BCAM =(按钮)findViewById(R.id.bCamera);
       preVIEW =(ImageView的)findViewById(R.id. preVIEW);
      bCam.setOnClickListener(新OnClickListener(){

       @覆盖
       公共无效的onClick(视图v){
        // TODO自动生成方法存根
        意图cameraIntent =新的意图(android.provider.MediaStore.ACTION_IM​​AGE_CAPTURE);
                    startActivityForResult(cameraIntent,100);
       }
      });


      b.setOnClickListener(新OnClickListener(){

       @覆盖
       公共无效的onClick(视图v){
        // TODO自动生成方法存根
         openGallery(10);
       }
      });
     }



     公共无效openGallery(INT req_ code){

            意向意图=新的意图();

            intent.setType(图像/ *);

            intent.setAction(Intent.ACTION_GET_CONTENT);

            startActivityForResult(Intent.createChooser(意向,选择要上传的文件),req_ code);

       }

    公共无效onActivityResult(INT申请code,INT结果code,意图数据){



            如果(结果code == RESULT_OK){
             如果(data.getData()!= NULL){
               selectedImageUri = data.getData();
             }其他{
              Log.d(selectedPath1:,来到这里的空!);
              Toast.makeText(getApplicationContext()!未能获得图片,500).show();
             }

             如果(要求code == 100安培;&安培;结果code == RESULT_OK){
                    。位图照片=(位图)data.getExtras()获得(数据);
                    selectedPath = getPath(selectedImageUri);
                    preview.setImageURI(selectedImageUri);
                    Log.d(selectedPath1:,selectedPath);

                }

                如果(要求code == 10)

                {

                   selectedPath = getPath(selectedImageUri);
                   preview.setImageURI(selectedImageUri);
                   Log.d(selectedPath1:,selectedPath);

                }

            }

        }


     公共字符串getPath(URI URI){

            的String []投影= {MediaStore.Images.Media.DATA};

            光标光标= managedQuery(URI,投影,NULL,NULL,NULL);

            INT与Column_Index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);

            cursor.moveToFirst();

            返回cursor.getString(Column_Index中);

        }

    }
 

在logcat的:

 一十月九号至17日:09:30.132:E / AndroidRuntime(7300):致命异常:主要
十月九号至17日:09:30.132:E / AndroidRuntime(7300):java.lang.RuntimeException的:不提供结果ResultInfo {谁= NULL,请求= 100,结果= -1,数据=意向{行为=内联数据(有群众演员)}}到活动{com.example.cameragallerypro / com.example.cameragallerypro.MainActivity}:显示java.lang.NullPointerException
十月九号至17日:09:30.132:E / AndroidRuntime(7300):在android.app.ActivityThread.deliverResults(ActivityThread.java:2536)
十月九号至17日:09:30.132:E / AndroidRuntime(7300):在android.app.ActivityThread.handleSendResult(ActivityThread.java:2578)
十月九号至17日:09:30.132:E / AndroidRuntime(7300):在android.app.ActivityThread.access $ 2000(ActivityThread.java:117)
十月九号至17日:09:30.132:E / AndroidRuntime(7300):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:965)
十月九号至17日:09:30.132:E / AndroidRuntime(7300):在android.os.Handler.dispatchMessage(Handler.java:99)
十月九号至17日:09:30.132:E / AndroidRuntime(7300):在android.os.Looper.loop(Looper.java:130)
十月九号至17日:09:30.132:E / AndroidRuntime(7300):在android.app.ActivityThread.main(ActivityThread.java:3689)
十月九号至17日:09:30.132:E / AndroidRuntime(7300):在java.lang.reflect.Method.invokeNative(本机方法)
十月九号至17日:09:30.132:E / AndroidRuntime(7300):在java.lang.reflect.Method.invoke(Method.java:507)
十月九号至17日:09:30.132:E / AndroidRuntime(7300):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:842)
十月九号至17日:09:30.132:E / AndroidRuntime(7300):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
十月九号至17日:09:30.132:E / AndroidRuntime(7300):在dalvik.system.NativeStart.main(本机方法)
十月九号至17日:09:30.132:E / AndroidRuntime(7300):由:显示java.lang.NullPointerException
十月九号至17日:09:30.132:E / AndroidRuntime(7300):在android.content.ContentResolver.acquireProvider(ContentResolver.java:743)
十月九号至17日:09:30.132:E / AndroidRuntime(7300):在android.content.ContentResolver.query(ContentResolver.java:256)
十月九号至17日:09:30.132:E / AndroidRuntime(7300):在android.app.Activity.managedQuery(Activity.java:1550)
十月九号至17日:09:30.132:E / AndroidRuntime(7300):在com.example.cameragallerypro.MainActivity.getPath(MainActivity.java:104)
十月九号至17日:09:30.132:E / AndroidRuntime(7300):在com.example.cameragallerypro.MainActivity.onActivityResult(MainActivity.java:79)
十月九号至17日:09:30.132:E / AndroidRuntime(7300):在android.app.Activity.dispatchActivityResult(Activity.java:3908)
十月九号至17日:09:30.132:E / AndroidRuntime(7300):在android.app.ActivityThread.deliverResults(ActivityThread.java:2532)
十月九号至17日:09:30.132:E / AndroidRuntime(7300):11 ...更多
 

我要如何修改code,使相机部分工作正常?

解决方案

  bCam.setOnClickListener(新OnClickListener(){

            @覆盖
            公共无效的onClick(视图v){
                // TODO自动生成方法存根

                from_camera();

            }
        });

        b.setOnClickListener(新OnClickListener(){

            @覆盖
            公共无效的onClick(视图v){
                // TODO自动生成方法存根

                from_gallery();

            }
        });


公共无效from_camera(){

        意图cameraIntent =新的意图(
                android.provider.MediaStore.ACTION_IM​​AGE_CAPTURE);

        startActivityForResult(cameraIntent,111);

    }


公共无效from_gallery(){
        意向意图=新的意图(Intent.ACTION_PICK,
                android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        startActivityForResult(意向,222);


    }





    @覆盖
    保护无效onActivityResult(INT申请code,INT结果code,意图数据){
        // TODO自动生成方法存根

        如果(结果code == RESULT_OK和放大器;&安培;请求code == 111){
            。位图照片=(位图)data.getExtras()获得(数据);
            preview.setImageBitmap(照片);



        }否则,如果(结果code == RESULT_OK和放大器;&安培;请求code == 222){

             乌里selectedImage = data.getData();
            的String [] filePathColumn = {MediaStore.Images.Media.DATA};

            光标光标= getContentResolver()查询(selectedImage,
                    filePathColumn,NULL,NULL,NULL);
            cursor.moveToFirst();

            INT参数:columnIndex = cursor.getColumnIndex(filePathColumn [0]);
            字符串picturePath = cursor.getString(参数:columnIndex);
            cursor.close();


            preview.setImageBitmap(BitmapFactory.de codeFILE(picturePath));

        super.onActivityResult(要求code,因此code,数据);
    }
 

I am trying out an online tutorial for loading image in an imageview from either the gallery or camera.The gallery part works fine, but the camera part force closes.The data retrieved from onactvitiyresult shows null.

The code:

package com.example.cameragallerypro;

import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
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 MainActivity extends Activity {

     Uri selectedImageUri;
      String  selectedPath;
      ImageView preview;
     @Override
     protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      Button b = (Button) findViewById(R.id.bGallery);
      Button bCam= (Button) findViewById(R.id.bCamera);
       preview = (ImageView) findViewById(R.id.preview);
      bCam.setOnClickListener(new OnClickListener() {

       @Override
       public void onClick(View v) {
        // TODO Auto-generated method stub
        Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                    startActivityForResult(cameraIntent, 100);
       }
      });


      b.setOnClickListener(new OnClickListener() {

       @Override
       public void onClick(View v) {
        // TODO Auto-generated method stub
         openGallery(10);
       }
      });
     }



     public void openGallery(int req_code){

            Intent intent = new Intent();

            intent.setType("image/*");

            intent.setAction(Intent.ACTION_GET_CONTENT);

            startActivityForResult(Intent.createChooser(intent,"Select file to upload "), req_code);

       }

    public void onActivityResult(int requestCode, int resultCode, Intent data) {



            if (resultCode == RESULT_OK) {
             if(data.getData() != null){
               selectedImageUri = data.getData();
             }else{
              Log.d("selectedPath1 : ","Came here its null !");
              Toast.makeText(getApplicationContext(), "failed to get Image!", 500).show();
             }

             if (requestCode == 100 && resultCode == RESULT_OK) { 
                    Bitmap photo = (Bitmap) data.getExtras().get("data");
                    selectedPath = getPath(selectedImageUri);
                    preview.setImageURI(selectedImageUri);
                    Log.d("selectedPath1 : " ,selectedPath);

                }

                if (requestCode == 10)

                {

                   selectedPath = getPath(selectedImageUri);
                   preview.setImageURI(selectedImageUri);
                   Log.d("selectedPath1 : " ,selectedPath);

                }

            }

        }


     public String getPath(Uri uri) {

            String[] projection = { MediaStore.Images.Media.DATA };

            Cursor cursor = managedQuery(uri, projection, null, null, null);

            int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);

            cursor.moveToFirst();

            return cursor.getString(column_index);

        }

    }

The logcat:

09-17 10:09:30.132: E/AndroidRuntime(7300): FATAL EXCEPTION: main
09-17 10:09:30.132: E/AndroidRuntime(7300): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=100, result=-1, data=Intent { act=inline-data (has extras) }} to activity {com.example.cameragallerypro/com.example.cameragallerypro.MainActivity}: java.lang.NullPointerException
09-17 10:09:30.132: E/AndroidRuntime(7300):     at android.app.ActivityThread.deliverResults(ActivityThread.java:2536)
09-17 10:09:30.132: E/AndroidRuntime(7300):     at android.app.ActivityThread.handleSendResult(ActivityThread.java:2578)
09-17 10:09:30.132: E/AndroidRuntime(7300):     at android.app.ActivityThread.access$2000(ActivityThread.java:117)
09-17 10:09:30.132: E/AndroidRuntime(7300):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:965)
09-17 10:09:30.132: E/AndroidRuntime(7300):     at android.os.Handler.dispatchMessage(Handler.java:99)
09-17 10:09:30.132: E/AndroidRuntime(7300):     at android.os.Looper.loop(Looper.java:130)
09-17 10:09:30.132: E/AndroidRuntime(7300):     at android.app.ActivityThread.main(ActivityThread.java:3689)
09-17 10:09:30.132: E/AndroidRuntime(7300):     at java.lang.reflect.Method.invokeNative(Native Method)
09-17 10:09:30.132: E/AndroidRuntime(7300):     at java.lang.reflect.Method.invoke(Method.java:507)
09-17 10:09:30.132: E/AndroidRuntime(7300):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
09-17 10:09:30.132: E/AndroidRuntime(7300):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
09-17 10:09:30.132: E/AndroidRuntime(7300):     at dalvik.system.NativeStart.main(Native Method)
09-17 10:09:30.132: E/AndroidRuntime(7300): Caused by: java.lang.NullPointerException
09-17 10:09:30.132: E/AndroidRuntime(7300):     at android.content.ContentResolver.acquireProvider(ContentResolver.java:743)
09-17 10:09:30.132: E/AndroidRuntime(7300):     at android.content.ContentResolver.query(ContentResolver.java:256)
09-17 10:09:30.132: E/AndroidRuntime(7300):     at android.app.Activity.managedQuery(Activity.java:1550)
09-17 10:09:30.132: E/AndroidRuntime(7300):     at com.example.cameragallerypro.MainActivity.getPath(MainActivity.java:104)
09-17 10:09:30.132: E/AndroidRuntime(7300):     at com.example.cameragallerypro.MainActivity.onActivityResult(MainActivity.java:79)
09-17 10:09:30.132: E/AndroidRuntime(7300):     at android.app.Activity.dispatchActivityResult(Activity.java:3908)
09-17 10:09:30.132: E/AndroidRuntime(7300):     at android.app.ActivityThread.deliverResults(ActivityThread.java:2532)
09-17 10:09:30.132: E/AndroidRuntime(7300):     ... 11 more

How do i modify the code so that the camera part works fine?

解决方案

bCam.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                from_camera();

            }
        });

        b.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                from_gallery();

            }
        });


public void from_camera() {

        Intent cameraIntent = new Intent(
                android.provider.MediaStore.ACTION_IMAGE_CAPTURE);

        startActivityForResult(cameraIntent, 111);

    }


public void from_gallery() {
        Intent intent = new Intent(Intent.ACTION_PICK,
                android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        startActivityForResult(intent, 222);


    }





    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub

        if (resultCode == RESULT_OK && requestCode == 111) {
            Bitmap photo = (Bitmap) data.getExtras().get("data");
            preview.setImageBitmap(photo);



        } else if (resultCode == RESULT_OK && requestCode == 222) {

             Uri selectedImage = data.getData();
            String[] filePathColumn = { MediaStore.Images.Media.DATA };

            Cursor cursor = getContentResolver().query(selectedImage,
                    filePathColumn, null, null, null);
            cursor.moveToFirst();

            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            String picturePath = cursor.getString(columnIndex);
            cursor.close();


            preview.setImageBitmap(BitmapFactory.decodeFile(picturePath));

        super.onActivityResult(requestCode, resultCode, data);
    }

这篇关于尝试从Android的画廊或相机获得的图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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