- 私の間違いは何ですか?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;
}