Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓-下载图像而不知道类型?_Android_Http_Image Processing_Android Asynctask_Background Thread - Fatal编程技术网

Android 安卓-下载图像而不知道类型?

Android 安卓-下载图像而不知道类型?,android,http,image-processing,android-asynctask,background-thread,Android,Http,Image Processing,Android Asynctask,Background Thread,在安卓系统中,有没有办法在不提前知道图像文件类型的情况下下载图像文件?我有一个异步任务,可以下载一个图像并将其设置为位图,但我不想强制任何特定的扩展。相反,我希望声明一组可接受的格式,然后仅使用唯一的文件名进行拉取。有什么建议或选择吗 public class asyncGetPhoto extends AsyncTask<Void, String, Bitmap>{ ProgressBar imageProgress; @Override protecte

在安卓系统中,有没有办法在不提前知道图像文件类型的情况下下载图像文件?我有一个异步任务,可以下载一个图像并将其设置为位图,但我不想强制任何特定的扩展。相反,我希望声明一组可接受的格式,然后仅使用唯一的文件名进行拉取。有什么建议或选择吗

public class asyncGetPhoto extends AsyncTask<Void, String, Bitmap>{
    ProgressBar imageProgress;

    @Override
    protected void onPreExecute(){
        imageProgress = (ProgressBar)findViewById(R.id.aboutusImgProgress);
        imageProgress.setVisibility(View.VISIBLE);
    }

    @Override
    protected Bitmap doInBackground(Void... arg0) {
        String url = "SomeDirectory/images/image1.png"
        Bitmap img = BitmapFactory.decodeStream((InputStream)new URL(url).getContent());
        return img;
    }

    @Override
    protected void onPostExecute(Bitmap img){
        photo.setImageBitmap(img);
        imageProgress.setVisibility(View.GONE);
    }

}
公共类asyncGetPhoto扩展了AsyncTask{
进步吧,进步吧;
@凌驾
受保护的void onPreExecute(){
imageProgress=(ProgressBar)findViewById(R.id.aboutusImgProgress);
imageProgress.setVisibility(View.VISIBLE);
}
@凌驾
受保护位图doInBackground(无效…arg0){
String url=“SomeDirectory/images/image1.png”
位图img=BitmapFactory.decodeStream((InputStream)新URL(URL).getContent());
返回img;
}
@凌驾
受保护的void onPostExecute(位图img){
photo.setImageBitmap(img);
imageProgress.setVisibility(View.GONE);
}
}

下载图像不需要知道类型。您可以将图像拉入字节数组,然后根据需要创建所需的图像对象

以下是一些下载图像的代码:

        URL u = new URL(imageUrl);
        URLConnection uc = u.openConnection();
        int contentLength = uc.getContentLength();
        InputStream in = new BufferedInputStream(uc.getInputStream());
        byte[] data = new byte[contentLength];
        int bytesRead;
        int offset = 0;
        while (offset < contentLength) {
            bytesRead = in.read(data, offset, data.length - offset);
            if (bytesRead == -1)
                break;
            offset += bytesRead;
        }
        in.close();
        if (offset != contentLength) {
            throw new IOException("Only read " + offset + " bytes; Expected " + contentLength + " bytes");
        }

下载图像时,mime类型应该在标题中,但只有在文件从服务器中取出后才能获得,对吗?此信息应该在标题中。在打开请求响应上的inputstream之前,可以使用HEAD请求或get获取它。
Bitmap bmp=BitmapFactory.decodeByteArray(data,0,data.length);
ImageView image=new ImageView(this);
image.setImageBitmap(bmp);