Android 从服务器获取位图图像以在ImageView上设置
我在服务器上有多个映像。我要做的是从服务器检索这些图像,并将其设置在imageView上 我已经从服务器获取了blob类型的图像,将其解码为字节数组,然后将其转换为位图图像 我对如何从服务器获取位图图像感到困惑 我经历了很多这样的问题 请给任何人一个链接或代码 谢谢你宝贵的时间 我一直在尝试,下面是代码:Android 从服务器获取位图图像以在ImageView上设置,android,android-image,bitmapimage,Android,Android Image,Bitmapimage,我在服务器上有多个映像。我要做的是从服务器检索这些图像,并将其设置在imageView上 我已经从服务器获取了blob类型的图像,将其解码为字节数组,然后将其转换为位图图像 我对如何从服务器获取位图图像感到困惑 我经历了很多这样的问题 请给任何人一个链接或代码 谢谢你宝贵的时间 我一直在尝试,下面是代码: public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanc
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Bitmap bitmap = DownloadImage("http://www.allindiaflorist.com/imgs/arrangemen4.jpg");
ImageView img = (ImageView) findViewById(R.id.img);
img.setImageBitmap(bitmap);
}
private InputStream OpenHttpConnection(String urlString)
throws IOException
{
InputStream in = null;
int response = -1;
URL url = new URL(urlString);
URLConnection conn = url.openConnection();
if (!(conn instanceof HttpURLConnection))
throw new IOException("Not an HTTP connection");
try{
HttpURLConnection httpConn = (HttpURLConnection) conn;
httpConn.setAllowUserInteraction(false);
httpConn.setInstanceFollowRedirects(true);
httpConn.setRequestMethod("GET");
httpConn.connect();
response = httpConn.getResponseCode();
if (response == HttpURLConnection.HTTP_OK) {
in = httpConn.getInputStream();
}
}
catch (Exception ex)
{
throw new IOException("Error connecting");
}
return in;
}
private Bitmap DownloadImage(String URL)
{
Bitmap bitmap = null;
InputStream in = null;
try {
in = OpenHttpConnection(URL);
BufferedInputStream bis = new BufferedInputStream(in, 8190);
ByteArrayBuffer baf = new ByteArrayBuffer(50);
System.out.println("BAF= "+baf);
int current = 0;
while ((current = bis.read()) != -1)
{
baf.append((byte)current);
}
byte[] imageData = baf.toByteArray();
System.out.println("imageData= "+imageData);
bitmap =BitmapFactory.decodeByteArray(imageData, 0, imageData.length);
in.close();
}
catch (IOException e1)
{
e1.printStackTrace();
}
return bitmap;
}
}
这将返回图像,但我使用的url包含图像名称。若我有更多的图像,并希望在应用程序加载时检索所有图像,该怎么办呢?我建议使用库,它可以异步下载图像,然后使用一个回调函数,侦听器将url和位图图像作为参数。我建议使用库,它的功能是异步下载图像,然后回调一个侦听器,将url和位图图像作为参数。我建议您使用另一种类似于魅力的方式:Android查询 您可以从此处下载该jar文件: 例如:
androidAQuery.id(YOUR IMAGEVIEW).image(YOUR IMAGE TO LOAD, true, true, getDeviceWidth(), ANY DEFAULT IMAGE YOU WANT TO SHOW);
使用上述代码,您可以通过url直接显示您的图像。下面的代码是直接从url获取位图:
androidAQuery.ajax(YOUR IMAGE URL,Bitmap.class,0,new AjaxCallback<Bitmap>(){
@Override
public void callback(String url, Bitmap object, AjaxStatus status) {
super.callback(url, object, status);
//You will get Bitmap from object.
}
});
这个库是由Android本身提供的,所以使用它并查看结果
这是非常快速和准确的,使用它你可以找到更多的功能,如动画加载时;如果需要,获取位图;等等。我建议您使用另一种类似于魅力的方式:Android查询 您可以从此处下载该jar文件: 例如:
androidAQuery.id(YOUR IMAGEVIEW).image(YOUR IMAGE TO LOAD, true, true, getDeviceWidth(), ANY DEFAULT IMAGE YOU WANT TO SHOW);
使用上述代码,您可以通过url直接显示您的图像。下面的代码是直接从url获取位图:
androidAQuery.ajax(YOUR IMAGE URL,Bitmap.class,0,new AjaxCallback<Bitmap>(){
@Override
public void callback(String url, Bitmap object, AjaxStatus status) {
super.callback(url, object, status);
//You will get Bitmap from object.
}
});
这个库是由Android本身提供的,所以使用它并查看结果
这是非常快速和准确的,使用它你可以找到更多的功能,如动画加载时;如果需要,获取位图;等等。我建议您使用演示文稿中的库,与Google在其应用程序Google Play中使用的库相同。在谷歌I/O13上,菲库斯·基尔克帕特里克(Ficus Kilkpatrick)凌空抽射。Volley是一个HTTP库,旨在删除大量样板代码,简化列表中图像的处理,更快,抽象出一个或另一个HTTP客户端的复杂性 初始化 Volley依赖于处理请求队列的RequestQueue和负责加载图像的ImageLoader。我们每个人都需要一个
public static ImageLoader mImageLoader;
public static RequestQueue mRequestQueue;
我们还需要初始化它们。队列需要上下文,ImageLoader需要ImageCache。在这里,我使用一个基本的包装器来实现LruCache
mRequestQueue = Volley.newRequestQueue(this);
mImageLoader = new ImageLoader(mRequestQueue, new BitmapLru(64000));
初始化在第一个活动的onCreate中完成
获取图像
假设您必须用从服务器下载的图像填充gridview。ImageUrlAdapter使用NetworkImageView填充GridView或任何AdapterView。这是Volley提供的一个类,用于将网络中的图像放入ImageView。它实际上扩展了ImageView,这意味着您可以在使用ImageView的任何地方使用它。它使用起来非常简单。适配器中唯一的代码是getView
@Override
public View getView(int position, View convertView, ViewGroup parent) {
NetworkImageView imageView;
if (convertView == null) {
imageView = new NetworkImageView(getContext());
} else {
imageView = (NetworkImageView) convertView;
}
String url = getItem(position);
imageView.setImageUrl(url, MainActivity.mImageLoader);
return imageView;
}
这里唯一的新功能是imageView.setImageUrlurl,MainActivity.mImageLoader
就这样。不需要更多内容。我建议您使用演示文稿中的库,即Google在其应用程序Google Play中使用的库。在谷歌I/O13上,菲库斯·基尔克帕特里克(Ficus Kilkpatrick)凌空抽射。Volley是一个HTTP库,旨在删除大量样板代码,简化列表中图像的处理,更快,抽象出一个或另一个HTTP客户端的复杂性 初始化 Volley依赖于处理请求队列的RequestQueue和负责加载图像的ImageLoader。我们每个人都需要一个
public static ImageLoader mImageLoader;
public static RequestQueue mRequestQueue;
我们还需要初始化它们。队列需要上下文,ImageLoader需要ImageCache。在这里,我使用一个基本的包装器来实现LruCache
mRequestQueue = Volley.newRequestQueue(this);
mImageLoader = new ImageLoader(mRequestQueue, new BitmapLru(64000));
初始化在第一个活动的onCreate中完成
获取图像
假设您必须用从服务器下载的图像填充gridview。ImageUrlAdapter使用NetworkImageView填充GridView或任何AdapterView。这是Volley提供的一个类,用于将网络中的图像放入ImageView。它实际上扩展了ImageView,这意味着您可以在使用ImageView的任何地方使用它。它使用起来非常简单。适配器中唯一的代码是getView
@Override
public View getView(int position, View convertView, ViewGroup parent) {
NetworkImageView imageView;
if (convertView == null) {
imageView = new NetworkImageView(getContext());
} else {
imageView = (NetworkImageView) convertView;
}
String url = getItem(position);
imageView.setImageUrl(url, MainActivity.mImageLoader);
return imageView;
}
这里唯一的新功能是imageView.setImageUrlurl,MainActivity.mImageLoader
就这样。不需要更多了。我强烈建议使用Square的库。它非常容易使用,并且消除了检索缓存的所有痛苦。 我强烈建议使用广场的图书馆。它非常容易使用,并且消除了检索缓存的所有痛苦。使用 既然你糊涂了,我会解释的 通过单击下载jar文件并将其粘贴到libs文件夹中 在清单中添加这两行权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
或者,如果您只需要位图,请使用此
Bitmap bmp = imageLoader.loadImageSync("http://www.allindiaflorist.com/imgs/arrangemen4.jpg");
使用
既然你糊涂了,我会解释的
通过单击下载jar文件并将其粘贴到libs文件夹中
在清单中添加这两行权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
或者,如果您只需要位图,请使用此
Bitmap bmp = imageLoader.loadImageSync("http://www.allindiaflorist.com/imgs/arrangemen4.jpg");
查看本教程,了解如何使用AsyncTask从服务器异步下载图像:volley、picasso、prime…感谢大家的回答。但每个人都在建议一种不同的技术,我对所有这些都是新手,这让我更加困惑。请查看本教程,了解如何使用AsyncTask从服务器异步下载图像:volley、picasso、prime…感谢大家的回答。但是每个人都在建议一种不同的技术,我对所有这些都是新手,这让我更加困惑。好吧,试试看,如果这篇文章对你有帮助,那么请接受并投票,这样其他人就可以使用它。你提供的链接包括各种jar文件。我应该下载所有的还是有一个特定的。不,只做一个,只做第一个或第二个。嘿,我已经更新了我的问题。你能告诉我代码还需要什么吗?无论你想要什么图片,一次获取所有的url,并将它们存储在数组或arraylist中,然后使用loop处理Android查询。所以你的图片会一个接一个地被下载和显示。好的,试试看,如果这篇文章对你有帮助,那么请接受并投票,这样其他人可以使用。你提供的链接包括各种jar文件。我应该下载所有的还是有一个特定的。不,只做一个,只做第一个或第二个。嘿,我已经更新了我的问题。你能告诉我代码还需要什么吗?无论你想要什么图片,一次获取所有的url,并将它们存储在数组或arraylist中,然后使用loop处理Android查询。所以,你的图像将一个接一个地被下载和显示。嘿,我正在看视频。我还可以用这个从服务器上检索.zip文件吗?你要做的是克隆项目存储库git clone并将其作为Android库导入到你的IDE中,最后从你的项目中引用导入的项目以使用它。嘿,我正在看视频。我还可以使用此工具从服务器检索.zip文件吗?您需要做的是克隆项目存储库git clone并将其作为Android库导入IDE中,最后从您的项目中引用导入的项目以使用它。