Android 通过API获取数据库中的图片文件方式
Overview
今天复习了一下Android如何将我们数据库中图片获取出来,并且将其转换为bitmap进行显示。
开发环境以及技术
使用VisualStudio2019
AndroidStudio3.5
API使用ASP.NETWEBAPI开发
数据库操作只用EntityFramework
使用本地数据库作为数据源
如果你是一个需要开发软件和API的程序员,那么你可以看一下,如果你不是可以选择跳过$\color{#6995C2}{API开发}$。
API开发
这里我为了开发的方便,所以所使用的API比较简陋。但是按照国际惯例我们先来看一下API方面的源代码。
我个人比较喜欢json所以我们将所有的端口转换为JSON。代码如下:
publicstaticclassWebApiConfig { publicstaticvoidRegister(HttpConfigurationconfig) { //WebAPI配置和服务 //WebAPI路由 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 publicobjectGetPictures() { varshowData=db.Pictures.ToList(); List>list=newList >(); foreach(variteminshowData) { list.Add(newTuple (item.Id,Convert.ToBase64String(item.Img))); } returnlist; }
这里我们使用了Base64的方法,先是将我们的字节数组转换为字符串并将其添加到元组中。并且进行返回。
这样我们的API基础部分就完成了。
Android如何操作图片
首先我们显示获取我们的网络资源。
想来看一下代码:
/** *ClassName-@MainActivity-@初始换主页面底部的图片 **/ privatevoidinitPictureData(){ newThread(newRunnable(){ @Override publicvoidrun(){ //通过http网络访问,获取到我们的网络数据。将Http的GET方法进行了封装 StringhttpData=Global.httpGet("Pictures",""); //将JSON进行解析并且添加到List中 Listlist=pictureData_JsonHelper.getJsonData(httpData); Log.d("main_pictureData",String.valueOf(list.size())); finalList bitmapsList=newArrayList<>(); for(inti=0;i viewsList=newArrayList<>(); for(inti=0;i 这样我们的全部操作就完成了。接着我们看一下我们这里使用到自己封装的方法了。
Http的方法这里就不看了。我相信大家都会。
publicstaticBitmapstringToBitmap(StringpictureString){ //使用Base64将String转换为Bitmap类型 byte[]bytes=Base64.decode(pictureString,Base64.NO_WRAP); //使用BitmapFactory将字节数组转换为Bitmap //这边我们需要对数据库返回的base64的数稍稍的做一下处理。否则可能无法正常显示图像。 for(inti=0;i这样我们的全部过程就已经完成了。
补充知识:android获取网络数据(超简单,直接调用)
我就废话不多说了,还是直接上代码吧!
StringgetNetData(StringconnectURL){ Stringresult="";//用来取得返回的String; //发送post请求 HttpPosthttpRequest=newHttpPost(connectURL); //Post运作传送变数必须用NameValuePair[]阵列储存 try{ //发出HTTP请求 Log.d("请求连接","在发送请求"); Listparams=newArrayList(); params.add(newBasicNameValuePair("start","123321"));//post请求(必须有,数据自定义) //params.add(newBasicNameValuePair("end",end+""));//可添加多个Post请求码,php中按键值对获取 httpRequest.setEntity(newUrlEncodedFormEntity(params,HTTP.UTF_8)); //取得HTTPresponse HttpResponsehttpResponse=newDefaultHttpClient().execute(httpRequest); //若状态码为200则请求成功,取到返回数据 Log.d("连接值",String.valueOf(httpResponse.getStatusLine().getStatusCode())); if(httpResponse.getStatusLine().getStatusCode()==200){ //取出字符串 Log.d("请求连接","连接成功"); result=newString(EntityUtils.toString(httpResponse.getEntity(),"utf8")); } }catch(Exceptione){ mHandler.post(newRunnable(){ @Override publicvoidrun(){ Toast.makeText(getContext(),"网络出错",Toast.LENGTH_SHORT).show(); } }); e.printStackTrace(); } returnresult; } //接下来就是解析获取到的json数据了,json数据的解析就需要根据需求自定义了以上这篇Android通过API获取数据库中的图片文件方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。