Komang Putra Ответов: 1

Кодирования и декодирования base64 и отправить его в ПК


вчера я сделал код, как отправить изображение на ПК
вот мой код...

графическое представление
upload_gambar = (ImageView) findViewById(R.id.gambar1);

это кнопка для загрузки изображения
pengajuan.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (editText.getText().toString().length() == 0) {
                    editText.setError("Masukkan Tanggal!");
                } else if (keterangan.getText().toString().length() == 0) {
                    keterangan.setError("Masukkan Keterangan!");
                } else if (upload_gambar.getDrawable() == null) {
                    Toast.makeText(getApplicationContext(), "Upload gambar terlebih dahulu", Toast.LENGTH_SHORT).show();
                } else {
                    try {
                        imagetoString(bitmap);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    
                    postfull();
                    postfullfirst();
                }
            }
        });



для выбора изображения
upload = (Button) findViewById(R.id.upload);
        upload.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ActivityCompat.requestPermissions(sakit.this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, CODE_GALLERY_REQUEST);
            }
        });
    }

    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {

        if (requestCode == CODE_GALLERY_REQUEST) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                Intent intent = new Intent(Intent.ACTION_PICK);
                intent.setType("image/*");
                startActivityForResult(Intent.createChooser(intent, "Select Image"), CODE_GALLERY_REQUEST);
            } else {
                Toast.makeText(getApplicationContext(), "You don't have permission to access gallery!", Toast.LENGTH_LONG).show();
            }
            return;
        }
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == CODE_GALLERY_REQUEST && resultCode == RESULT_OK && data != null) {
            Uri path = data.getData();
            try {
                InputStream inputStream = getContentResolver().openInputStream(path);
                bitmap = BitmapFactory.decodeStream(inputStream);
                upload_gambar.setImageBitmap(bitmap);
                upload_gambar.setVisibility(View.VISIBLE);
            } catch (IOException e) {
                e.printStackTrace();
            }
            Toast.makeText(sakit.this, "Gambar sudah diupload", Toast.LENGTH_SHORT).show();
        }
        super.onActivityResult(requestCode, resultCode, data);
    }


это команда а оно есть
 private void imagetoString(Bitmap bitmap) throws IOException {
        String gambar = nopengajuan.getText().toString();

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, 50, baos);
        byte[] imageBytes = baos.toByteArray();
        String imageString = Base64.encodeToString(imageBytes, Base64.DEFAULT);

        imageBytes = Base64.decode(imageString, Base64.DEFAULT);
        Bitmap decodedImage = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.length);
        upload_gambar.setImageBitmap(decodedImage);
        FileOutputStream fos = new FileOutputStream ("C:\\Users\\ICT-PROGRAMER\\Pictures\\" + gambar + ".jpeg");
        fos.write(imageBytes);
    }
}


Что я уже пробовал:

- изображение уже закодировано
- строка, закодированная была декодирована
- изображение не появляется в файле

1 Ответов

Рейтинг:
1

OriginalGriff

Во-первых, ваши соглашения об именах оставляют желать лучшего: "imagetoString" принимает изображение, но не возвращает строку, и он фактически пытается записать его в файл, а не делать что-либо со строкой. Сделайте так, чтобы имена ваших методов отражали то, что на самом деле делает код, и ваш код будет легче читать и работать с ним.

Во - вторых, совершенно не очевидно, что вы на самом деле делаете и что может пойти не так-вам нужно кодировать, работая с вашими фактическими данными, чтобы попытаться понять, что происходит, и у нас просто нет доступа ни к тому, ни к другому.

Так что все будет зависеть от тебя.
К счастью, у вас есть инструмент, который поможет вам выяснить, что происходит: отладчик. Как вы его используете, зависит от вашей системы компилятора, но быстрый поиск в Google имени вашей IDE и "отладчика" должен дать вам необходимую информацию.

Поместите точку останова в первую строку функции и запустите код через отладчик. Затем посмотрите на свой код и на свои данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что то, что вы ожидали, произойдет именно так, как и произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему.

Извините, но мы не можем сделать это за вас - пришло время вам освоить новый (и очень, очень полезный) навык: отладку!


David Crow

"...отправить изображение на ПК"

Откуда же? Если это с Android-устройства, я не думаю, что это сработает:

FileOutputStream fos = new FileOutputStream ("C:\\Users\\ICT-PROGRAMER\\Pictures\\" + gambar + ".jpeg");
Вы можете это подтвердить?

OriginalGriff

Этого не будет. Я предполагаю, что он понятия не имеет, что делает, и случайно нашел код на t'interwebz.

David Crow

-и случайно нашел код на t'interwebz."

Люди так делают?

Komang Putra

Да это не работает

OriginalGriff

И что же?
Что он делает такого, чего вы не ожидали, или не делает того, что вы сделали?
Что вы пытались сделать, чтобы выяснить, почему?
Есть ли какие-либо сообщения об ошибках, и если да, то где и когда? Что вы сделали, чтобы это произошло?

Это не очень хороший вопрос - мы не можем понять из этого малого, что вы пытаетесь сделать.
Помните, что мы не можем видеть ваш экран, получить доступ к вашему жесткому диску или прочитать ваши мысли - мы получаем только то, что вы печатаете для работы.