Как сделать снимок с помощью камеры и сохранить его на сервере? - PullRequest
0 голосов
/ 04 декабря 2018

Я хочу сделать снимок с помощью камеры и сохранить его на сервере.Но я получаю исключение нулевого указателя после захвата изображения.Завершено в основном, но эта ошибка раздражает.Я новичок в Android, я не знаю, почему эта ошибка происходит.Нужна помощь, спасибо заранее

 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (resultCode == RESULT_OK && requestCode == CAMERA) {

        if (data == null) {
            Snackbar.make(parentView, R.string.string_unable_to_pick_image, Snackbar.LENGTH_INDEFINITE).show();
            return;
        }

        Bitmap photo = (Bitmap) data.getExtras().get("data");
        imageView.setImageBitmap(photo);


        // CALL THIS METHOD TO GET THE URI FROM THE BITMAP

            Uri tempUri = getImageUri(getApplicationContext(), photo);

            // CALL THIS METHOD TO GET THE ACTUAL PATH

        File finalFile = new File(getRealPathFromURI(tempUri));
            decodeFile(finalFile.toString());}}

** метод getImageUri **

 public Uri getImageUri(Context inContext, Bitmap inImage) {
    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
    inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
    String path = MediaStore.Images.Media.insertImage(inContext.getContentResolver(), inImage, "aadhar", null);
    return Uri.parse(path);//getting error here
}

Метод getRealPathFromURI

public String getRealPathFromURI(Uri uri) {
    Cursor cursor = getContentResolver().query(uri, null, null, null, null);
    cursor.moveToFirst();
    int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
    return cursor.getString(idx);
}

decodeFileМетод

 public void decodeFile(String filePath) {
    // Decode image size
    BitmapFactory.Options o = new BitmapFactory.Options();
    o.inJustDecodeBounds = true;
    BitmapFactory.decodeFile(filePath, o);
    // The new size we want to scale to
    final int REQUIRED_SIZE = 1024;
    // Find the correct scale value. It should be the power of 2.
    int width_tmp = o.outWidth, height_tmp = o.outHeight;
    int scale = 1;
    while (true) {
        if (width_tmp < REQUIRED_SIZE && height_tmp < REQUIRED_SIZE)
            break;
        width_tmp /= 2;
        height_tmp /= 2;
        scale *= 2;
    }

    // Decode with inSampleSize
    BitmapFactory.Options o2 = new BitmapFactory.Options();
    o2.inSampleSize = scale;
   Bitmap bitmap = BitmapFactory.decodeFile(filePath, o2);

    imageView.setImageBitmap(bitmap);
}

Ошибка

             Caused by: java.lang.NullPointerException: uriString
                  at android.net.Uri$StringUri.<init>(Uri.java:475)
                  at android.net.Uri$StringUri.<init>(Uri.java)
                  at android.net.Uri.parse(Uri.java:437)
                  at com.androidbuts.ui.MainActivity.getImageUri(MainActivity.java:274)
                  at com.androidbuts.ui.MainActivity.onActivityResult(MainActivity.java:233)
                  at android.app.Activity.dispatchActivityResult(Activity.java:7139)

1 Ответ

0 голосов
/ 04 декабря 2018
<!--First define permissions in Menifest-->
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />

// открыть камеру как

        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(intent, CAMERA);

// Затем извлечь изображение как

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == CAMERA && data != null) {
        Bitmap photo = (Bitmap) data.getExtras().get("data");

        File imageStorageDir = new File(Environment.getExternalStorageDirectory(),
                getResources().getString(R.string.app_name));
        if (!imageStorageDir.exists()) {
            imageStorageDir.mkdirs();
        }
        imagePath = imageStorageDir + File.separator + "_NAME_YOU_WISH" + ".jpg";
        fileImage = new File(imagePath); // FILE
        try {
            FileOutputStream out = new FileOutputStream(imagePath);
            photo.compress(Bitmap.CompressFormat.JPEG, 100, out);
            out.flush();
            out.close();

            if (fileImage != null) {
                if (fileImage.isFile() && fileImage.exists()) {
                   // MyApplication.log(LOG_TAG, "onActivityResult() SHOWING IMAGE BY GLIDE, fileImage:-> " + fileImage.getAbsolutePath());
                    Glide.with(context)
                            .load(fileImage.getAbsoluteFile())
                            .asBitmap()
                            .placeholder(R.drawable.ic_broken_image)
                            .into(img_camera);
                }
            }

        } catch (Exception e) {
            //MyApplication.log(LOG_TAG, "onActivityResult() , Exception: " + e.getMessage());
        }
    }
}

// ВЫЗВАТЬ ФУНКЦИЮ ОТПРАВИТЬ ИЗОБРАЖЕНИЕ НА СЕРВЕР

public void callSendCheckReport() {
    MyApplication.showDialog(context, "Please Wait...");

    HashMap<String, Object> map = new HashMap<>();
    map.put("date", today);
    map.put("salesman_id", MyApplication.get_session(MyApplication.SESSION_SALESMAN_ID));

    if (actionStatus.equals("do_CHECK_IN")) {  //// do_CHECK_IN,  do_NO_CHANGE,  do_CHECK_OUT
        map.put("checkin", "yes");
        map.put("in_time", checkTimeStamp);
        if (fileImage != null)
            map.put("in_image", new TypedFile("image*//*", fileImage));
    }

    RestClient.getWebServices().sendCheckReport(map,
            new Callback<String>() {
                @Override
                public void success(String s, Response response) {

                    MyApplication.log(LOG_TAG, "Responce is----> " + s);
                    try {
                        JSONObject res = new JSONObject(s);  // "status":"TRUE","message":"Shop Registered Successfully."}
                        String status = res.getString("status");
                        String message = res.getString("message");

                        MyApplication.stopLoading();
                        if (status.equals("TRUE")) {
                            if (fileImage.exists())
                                fileImage.delete();
                        }
                        showDialogBox(context, getResources().getString(R.string.app_name), message);
                    } catch (JSONException e) {
                        MyApplication.stopLoading();
                       // MyApplication.log(LOG_TAG + "RESPONSE JSONException  ->" + e.getMessage());
                    }
                }

                @Override
                public void failure(RetrofitError error) {
                    MyApplication.log(LOG_TAG + " RetrofitError  ->" + error.getMessage());
                    MyApplication.stopLoading();
                }
            });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...