繁体   English   中英

从相机拍摄照片并将其显示到ImageView Android

[英]Take Picture From Camera And Show it to the ImageView Android

在我很抱歉如果我的帖子可能重复之前,但是在这个问题中我还有另一种情况之前,我想显示我从ImageView中的相机捕获的图像,然后保存或将其上传到我的json文件中,但是之后拍照,它在Log.i ("Error", "Maybe Here");停止Log.i ("Error", "Maybe Here");

我的代码没有错误,但图像无法保存到缩略图ImageView中

这是我的代码,我正在使用Asyntask

    public class StoreTodoDisplayActivity extends AppCompatActivity {
    public Context ctx;
    Uri imgUri;
    ActionBar actionBar;
    public static CategoryData category_data_ar[];
    public static CategoryData category_data_ar2[];
    String targetUrl;
    String path = Environment.getExternalStorageDirectory()
            + "/DCIM/Camera/img11.jpg";
    public static final String PREFS_NAME = "MyPrefsFile";
    SharedPreferences settings;
    RestData restData;
    ImageData imgData;
    public Uri mCapturedImageURI;
    public String image_path = "";
    Toolbar toolbar;

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.camera_display);
        targetUrl = Config.getEndPointUrl();
        ctx = this.getApplicationContext();
        System.gc();

        set_Spinner();
        set_Spinner2();

        // Toolbar show
        toolbar = (Toolbar) findViewById(R.id.actionbarCameraDisplay);
        setSupportActionBar(toolbar);
        final android.support.v7.app.ActionBar abar = getSupportActionBar();
        abar.setDisplayShowCustomEnabled(true);
        abar.setDisplayShowTitleEnabled(false);
        abar.setDisplayHomeAsUpEnabled(true);
        abar.setHomeButtonEnabled(true);
        // Back button pressed
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                onBackPressed();
            }
        });

        settings = getSharedPreferences(PREFS_NAME, 0);
    }


    @Override
    public void onResume() {
        if (!UserInfo.loginstatus) {
            finish();
        }
        super.onResume();
    }

    public void get_pic(View view) {
        String fileName = "temp.jpg";
        ContentValues values = new ContentValues();
        values.put(MediaStore.Images.Media.TITLE, fileName);
        mCapturedImageURI = getContentResolver().insert(
                MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);

        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, mCapturedImageURI);

        startActivityForResult(intent, 12345);

    }

    public void save_img(View view) {
        EditText te = (EditText) findViewById(R.id.camera_display_txt);
        String msg = te.getText().toString();

        Spinner sp = (Spinner) findViewById(R.id.spinner1);
        int catid = (int) sp.getSelectedItemId();
        String cat = category_data_ar[catid].catid;

        Spinner sp2 = (Spinner) findViewById(R.id.spinner2);
        int catid2 = (int) sp2.getSelectedItemId();
        String cat2 = category_data_ar2[catid2].catid;

        ImageUploader uploader = new ImageUploader("display", msg, cat, cat2);
        uploader.execute(Config.getEndPointUrl() + "/uploadimage.json");

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == 12345) {
            if (resultCode == RESULT_OK) {

                getimage getm = new getimage();
                getm.execute();

            }
        }
    }

    public void set_Spinner2() {
        Spinner sp = (Spinner) findViewById(R.id.spinner2);
        sp.setVisibility(View.VISIBLE);
        CatProductHelper helper = new CatProductHelper(ctx);
        category_data_ar2 = helper.getCategories();
        String[] isidesc = new String[category_data_ar2.length];
        for (int k = 0; k < category_data_ar2.length; k++) {
            isidesc[k] = category_data_ar2[k].catdesc;
            Log.i("AndroidRuntime", "Desc -- " + category_data_ar2[k].catdesc);
        }

        ArrayAdapter spinnerArrayAdapter = new ArrayAdapter(
                StoreTodoDisplayActivity.this,
                android.R.layout.simple_spinner_item, isidesc);
        spinnerArrayAdapter
                .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        sp.setAdapter(spinnerArrayAdapter);

    }

    public void set_Spinner() {
        // set list activity
        Spinner sp = (Spinner) findViewById(R.id.spinner1);
        category_data_ar = StoreInfo.storeDisplayCat;
        try {

            String[] isidesc = new String[category_data_ar.length];
            Log.i("toTry", "Normal");
            for (int k = 0; k < category_data_ar.length; k++) {
                isidesc[k] = category_data_ar[k].catdesc;
                Log.i("AndroidRuntime", "Desc -- "
                        + category_data_ar[k].catdesc);
            }

            ArrayAdapter spinnerArrayAdapter = new ArrayAdapter(
                    StoreTodoDisplayActivity.this,
                    android.R.layout.simple_spinner_item, isidesc);
            spinnerArrayAdapter
                    .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            sp.setAdapter(spinnerArrayAdapter);

        } catch (Exception e) {
            Log.i("toCatch", "NULL EXCEPTION");
            DisplayCatHelper helperDisplayCat = new DisplayCatHelper(ctx);
            CategoryData[] displayCat = helperDisplayCat.getCategories();
            String[] isidesc = new String[displayCat.length];
            for (int k = 0; k < displayCat.length; k++) {
                isidesc[k] = displayCat[k].catdesc;
                Log.i("AndroidRuntime", "Desc -- " + displayCat[k].catdesc);
            }

            ArrayAdapter spinnerArrayAdapter = new ArrayAdapter(this,
                    android.R.layout.simple_spinner_item, isidesc);
            spinnerArrayAdapter
                    .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            sp.setAdapter(spinnerArrayAdapter);
        }

    }

    private class ImageUploader extends AsyncTask<String, String, String> {
        ProgressDialog dialog;

        private String url;
        private String cameraType;
        private String cameraMsg;
        private String cameraCat;
        private String catproduct;

        public ImageUploader(String type, String msg, String cat, String cat2) {
            cameraType = type;
            cameraMsg = msg;
            cameraCat = cat;
            catproduct = cat2;
        }

        @Override
        protected void onPreExecute() {
            dialog = ProgressDialog.show(StoreTodoDisplayActivity.this, "",
                    "Uploading...", false);
            // none
        }

        @Override
        protected String doInBackground(String... params) {
            url = params[0];
            Log.i("ncdebug", "upload image to: " + url);
            try {
                if (image_path.equals("")) {
                    Log.i("ncdebug", "bmp kosong!!!!");
                } else {
                    Log.i("ncdebug", "Ok bmp gak kosong, mari kirim");
                    restData = new RestData();
                    imgData = new ImageData();
                    restData.setTitle("Display : " + StoreInfo.storename);
                    restData.setRequestMethod(RequestMethod.POST);
                    restData.setUrl(url);
                    imgData.setImageData(url, image_path, cameraMsg, cameraCat
                                    + "-" + catproduct, UserInfo.username,
                            StoreInfo.storeid, cameraType, UserInfo.checkinid);

                    saveToDb();

                    return "Success";
                }

            } catch (Exception e) {
                //saveToDb();
            }
            return "Penyimpanan gagal, ulangi tahap pengambilan gambar";
        }

        @Override
        protected void onPostExecute(String Result) {
            dialog.dismiss();
            if (Result.equals("Success")) {
                Toast.makeText(ctx, "Data tersimpan", Toast.LENGTH_SHORT)
                        .show();
                // checked todo
                String vVar = StoreInfo.storeid + "-" + UserInfo.username
                        + "-displaycam";
                SharedPreferences.Editor editor = settings.edit();
                editor.putBoolean(vVar, true);
                editor.commit();

                Intent intent = new Intent(ctx, StoreTodoActivity.class);
                startActivity(intent);
                finish();
            } else {
                Toast.makeText(ctx, Result, Toast.LENGTH_LONG)
                        .show();
            }

        }
    }

    public void saveToDb() {
        Log.i("eris", "connection failed so save to db");
        RestHelper helper = new RestHelper(ctx);
        helper.insertRest(restData);
        imgData.setRestId(helper.getRestId());
        Log.i("REST ID", helper.getRestId());
        ImageHelper imgHelper = new ImageHelper(ctx);
        imgHelper.insertRest(imgData);
    }

    public class getimage extends AsyncTask<String, String, String> {
        String orientation = "";
        Bitmap bitmap;
        BitmapFactory.Options bitmapOptions = new BitmapFactory.Options();

        @Override
        protected String doInBackground(String... params) {
            // TODO Auto-generated method stub
//            Log.i("INI BACKGROUND", "LIHAT");
            try {
                String[] projection = {MediaStore.Images.Media.DATA};
                Cursor cursor = getContentResolver().query(mCapturedImageURI, projection,
                        null, null, null);
                int column_index_data = cursor
                        .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
                cursor.moveToFirst();
                String capturedImageFilePath = cursor
                        .getString(column_index_data);
                String parentPath = Environment.getExternalStorageDirectory()
                        + "/Nestle Confect";
                String filename = System.currentTimeMillis() + ".jpg";
                BitmapFactory.Options opts = new BitmapFactory.Options();
                opts.inSampleSize = 4;
                Bitmap bmp = BitmapFactory.decodeFile(capturedImageFilePath,
                        opts);
                ByteArrayOutputStream bytes = new ByteArrayOutputStream();
                bmp.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
                File file = new File(parentPath);
                file.mkdir();
                try {
                    file.createNewFile();
                    Log.i("absoulute path", file.getAbsolutePath());
                    FileOutputStream fo = new FileOutputStream(file + "/"
                            + filename, true);

                    // 5
                    fo.write(bytes.toByteArray());
                    fo.close();
                    image_path = parentPath + "/" + filename;
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                    image_path = capturedImageFilePath;
                }

                byte[] thumb = null;
                try {
                    ExifInterface exif = new ExifInterface(
                            capturedImageFilePath);
                    orientation = exif
                            .getAttribute(ExifInterface.TAG_ORIENTATION);
                    thumb = exif.getThumbnail();

                } catch (IOException e) {

                }

                if (thumb != null) {
                    Log.i("IMAGEVIEW", "THUMBNAIL");
                    bitmap = BitmapFactory.decodeByteArray(thumb, 0,
                            thumb.length);
                } else {
                    Log.i("IMAGEVIEW", "REALFILE");
                    return "not fine";
                }
                return "fine";
            } catch (Exception e) {
                return "not fine";
            }
        }

        @Override
        public void onPostExecute(String result) {
            // PROBLEM HERE
            Log.i("ERROR", "HERE MAYBE");
            if (result.equals("fine")) {
                ImageView gambarHasil = (ImageView) findViewById(R.id.camera_display_img);
                gambarHasil.setImageBitmap(bitmap);
                if (!orientation.equals("1")) {
                    Log.i("ORIENTATION", orientation);
                    float angel = 0f;
                    if (orientation.equals("6")) {
                        angel = 90f;
                    } else if (orientation.equals("8")) {
                        angel = -90f;
                    }
                    Matrix matrix = new Matrix();
                    gambarHasil.setScaleType(ScaleType.MATRIX); // required
                    matrix.postRotate((float) angel, gambarHasil.getDrawable()
                            .getBounds().width() / 2, gambarHasil.getDrawable()
                            .getBounds().height() / 2);
                    gambarHasil.setImageMatrix(matrix);
                }
            } else {
                Toast.makeText(
                        ctx,
                        "Error, Try To Take Picture Again",
                        Toast.LENGTH_LONG).show();
            }
        }
    }

}

我认为您的活动刚刚重新开始,您需要在声明的清单中放置以下代码。 并将您的uri保存在saveInstanceState上,并在onrestoreinstancestate上将其还原。 这将解决您的问题

android:configChanges="orientation|keyboardHidden|screenSize"

使用此库,可提供API 14以上的支持https://github.com/google/cameraview

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM