Overview 今天复习了一下Android 如何将我们数据库中图片获取出来,并且将其转换为bitmap进行显示。 开发环境以及技术 使用Visual Studio 2019 Android Studio 3.5 API 使用 ASP .NET WEB API 开发 数据库
Overview
今天复习了一下Android 如何将我们数据库中图片获取出来,并且将其转换为bitmap进行显示。
开发环境以及技术
使用Visual Studio 2019
Android Studio 3.5
API 使用 ASP .NET WEB API 开发
数据库操作只用Entity Framework
使用本地数据库作为数据源
如果你是一个需要开发软件和API的程序员,那么你可以看一下,如果你不是可以选择跳过 $\color{#6995C2}{API开发}$。
API 开发
这里我为了开发的方便,所以所使用的API比较简陋。但是按照国际惯例我们先来看一下API方面的源代码。
我个人比较喜欢json所以我们将所有的端口转换为JSON。代码如下:
public static class WebApiConfig { public static void Register(HttpConfiguration config) { // Web API 配置和服务 // Web API 路由 config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear(); } }
我们需要在我们的WebApiCinfig的类中添加一句代码这样我们就将所有的端口返回数据变成了JSON格式的数据了。
然后我们看一下如何返回我们的图片数据:
// GET: api/Pictures public object GetPictures() { var showData = db.Pictures.ToList(); List<Tuple<int,string>> list = new List<Tuple<int, string>>(); foreach (var item in showData) { list.Add(new Tuple<int, string>(item.Id,Convert.ToBase64String(item.Img))); } return list; }
这里我们使用了Base64的方法,先是将我们的字节数组转换为字符串并将其添加到元组中。并且进行返回。
这样我们的API基础部分就完成了。
Android 如何操作图片
首先我们显示获取我们的网络资源。
想来看一下代码:
/** * ClassName- @MainActivity-@初始换主页面底部的图片 **/ private void initPictureData() { new Thread(new Runnable() { @Override public void run() { //通过http网络访问,获取到我们的网络数据。将Http的GET方法进行了封装 String httpData = Global.httpGet("Pictures", ""); //将JSON进行解析并且添加到List中 List<pictureEntity> list = pictureData_JsonHelper.getJsonData(httpData); Log.d("main_pictureData", String.valueOf(list.size())); final List<Bitmap> bitmapsList = new ArrayList<>(); for (int i = 0; i < list.size(); i++) { //在循环将String转换为图片。这里将我们的转换方法进行了封装 bitmapsList.add(Global.stringToBitmap(list.get(i).getPicString())); } Log.d("BitmapsData", String.valueOf(bitmapsList.size())); //下面是ViewPager 控件的操作。 final List<View> viewsList = new ArrayList<>(); for (int i = 0; i < bitmapsList.size(); i++) { View view = View.inflate(MainActivity.this, R.layout.viewpage_item, null); ImageView imageView = view.findViewById(R.id.itemImageView); imageView.setImageBitmap(bitmapsList.get(i)); viewsList.add(view); } runOnUiThread(new Runnable() { @Override public void run() { ViewPager viewPager = findViewById(R.id.viewPager); viewPager.setAdapter(new viewPager_Adapter(viewsList)); } }); } }).start(); }
这样我们的全部操作就完成了。接着我们看一下我们这里使用到自己封装的方法了。
Http 的方法这里就不看了。我相信大家都会。
public static Bitmap stringToBitmap(String pictureString) { //使用Base64将String 转换为 Bitmap 类型 byte[] bytes = Base64.decode(pictureString, Base64.NO_WRAP); //使用BitmapFactory将字节数组转换为Bitmap //这边我们需要对数据库返回的base64的数稍稍的做一下处理。否则可能无法正常显示图像。 for (int i = 0; i < bytes.length; ++i) { if (bytes[i] < 0) { bytes[i] += 256; } } //生成图片并且返回。 return BitmapFactory.decodeByteArray(bytes, 0, bytes.length); }
这样我们的全部过程就已经完成了。
补充知识:android 获取网络数据(超简单,直接调用)
我就废话不多说了,还是直接上代码吧!
String getNetData(String connectURL){ String result = ""; //用来取得返回的String; //发送post请求 HttpPost httpRequest = new HttpPost(connectURL); //Post运作传送变数必须用NameValuePair[]阵列储存 try { //发出HTTP请求 Log.d("请求连接", "在发送请求"); List params = new ArrayList(); params.add(new BasicNameValuePair("start", "123321"));//post请求(必须有,数据自定义) //params.add(new BasicNameValuePair("end", end+""));//可添加多个Post请求码,php中按键值对获取 httpRequest.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8)); //取得HTTP response HttpResponse httpResponse = new DefaultHttpClient().execute(httpRequest); //若状态码为200则请求成功,取到返回数据 Log.d("连接值", String.valueOf(httpResponse.getStatusLine().getStatusCode())); if (httpResponse.getStatusLine().getStatusCode() == 200) { //取出字符串 Log.d("请求连接", "连接成功"); result = new String(EntityUtils.toString(httpResponse.getEntity(),"utf8")); } } catch (Exception e) { mHandler.post(new Runnable() { @Override public void run() { Toast.makeText(getContext(), "网络出错",Toast.LENGTH_SHORT).show(); } }); e.printStackTrace(); } return result; } //接下来就是解析获取到的json数据了,json数据的解析就需要根据需求自定义了
以上这篇Android 通过API获取数据库中的图片文件方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持自由互联。