BitmapFactory.decodeStream не может декодировать тип png из ftp

What was my mistake? How I show png from FTP?

Я новичок для Android и пытаюсь показать изображение с разницы между подключением / источником. Тогда я уже показываю изображение, которое загружается из drawable и HTTP.

Теперь я пытаюсь показать с FTP, я получаю сообщение "--- decoder-"> "decode возвращено false" когда я использую ..BitmapFactory.decodeStream(ins, null, options);

Тогда я нашел решение ..

static class FlushedInputStream extends FilterInputStream {
    public FlushedInputStream(InputStream inputStream) {
        super(inputStream);
    }

    @Override
    public long skip(long n) throws IOException {
        long totalBytesSkipped = 0L;
        while (totalBytesSkipped < n) {
            long bytesSkipped = in.skip(n - totalBytesSkipped);
            if (bytesSkipped == 0L) {
                int b = read();
                if (b < 0) {
                    break; // we reached EOF
                } else {
                    bytesSkipped = 1; // we read one byte
                }
            }
            totalBytesSkipped += bytesSkipped;
        }
        return totalBytesSkipped;
    }
}

Затем он может загрузить / декодировать тип файла "Jpeg, jpg", там шоу покажут полностью.

Но журнал cat скажет: "--- decoder-> декодер вернул false" когда растровое изображение загружает тип файла "PNG" снова.

Спасибо за совет ...

    ImageView bmImage = (ImageView) findViewById(R.id.faceImageView);
    BitmapFactory.Options bmOptions;
    bmOptions = new BitmapFactory.Options();
    bmOptions.inSampleSize = 1;
    Bitmap bm = LoadImage(image_URL, bmOptions);
    bmImage.setImageBitmap(bm);

...

private Bitmap LoadImage(String URL, BitmapFactory.Options options) {
    Bitmap bitmap = null;
    InputStream in = null;
    FlushedInputStream fIns = null;

    try {
        if (isFTP) {
            in = downloadFile("");
            if (remoteFile.toLowerCase().contains(".png")) {
                fIns = new FlushedInputStream(in);
                bitmap = BitmapFactory.decodeStream(fIns, null, options);
                // byte[] bMapArray = new byte[buf.available()];
                // buf.read(bMapArray);
                // bitmap = BitmapFactory.decodeByteArray(bMapArray, 0,
                // bMapArray.length);
            } else {
                fIns = new FlushedInputStream(in);
                bitmap = BitmapFactory.decodeStream(fIns);
            }

        } else { // HTTP
            in = OpenHttpConnection(URL);
            fIns = new FlushedInputStream(in);
            bitmap = BitmapFactory.decodeStream(fIns);
        }

        in.close();
    } catch (IOException e1) {
    }
    return bitmap;
}
public synchronized InputStream downloadFile(String localfilename) {
        InputStream inputStream = null;
        String user = "aaa";
        String pass = "8888";
        String host = "xxx.xxx.xxx.xxx";

        try {

            FTPClient mFTPClient = new FTPClient();
            mFTPClient.connect(host);
            mFTPClient.login(user, pass);
            mFTPClient.enterLocalPassiveMode();
            mFTPClient.changeWorkingDirectory("/DroidPic");
            String[] aa = mFTPClient.listNames();
            String strTmp = "";
            do {
                strTmp = aa[(new Random()).nextInt(aa.length)];
            } while (remoteFile == strTmp);
            remoteFile = strTmp;
            inputStream = mFTPClient.retrieveFileStream(remoteFile);
        } catch (Exception ex) {
            Toast.makeText(this, "Err:" + ex.getMessage(), Toast.LENGTH_LONG)
                    .show();
        }
        return inputStream;
    }

Ответы на вопрос(0)

Ваш ответ на вопрос