3
  • 私の間違いは何ですか?FTP から png を表示するにはどうすればよいですか?

私はアンドロイドの初心者で、異なる接続/ソースから画像を表示しようとしています。次に、ドローアブルとHTTPからロードする画像をすでに表示しています。

今、私はFTPから表示しようとしています.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」をロード/デコードできます。完全に表示されます。

しかし、ビットマップがファイルタイプ「PNG」を再度ロードすると、ログキャットは「---デコーダ->デコードがfalseを返しました」と言います。

アドバイスありがとう...

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

0 に答える 0