BitmapFactory.decodeStream não pode decodificar o tipo png do ftp

Qual foi o meu erro? Como eu mostro png do FTP?

Eu sou newby para android e tentar mostrar imagem de diferença connection / source. Então eu já mostro imagem qual carga de drawable e HTTP.

Agora, eu tento mostrar do FTP, eu recebo a mensagem "--- decoder-> decode retornou false" quando eu uso ..BitmapFactory.decodeStream(ins, null, options);

Então eu encontrei a solução ..

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;
    }
}

Em seguida, ele pode carregar / decodificar o tipo de arquivo "Jpeg, jpg", há show completamente.

Mas o log cat diz "--- decoder-> decode retornou false" quando o bitmap carregar o tipo de arquivo "PNG" novamente.

Obrigado pelo conselho ...

    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;
    }

questionAnswers(0)

yourAnswerToTheQuestion