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()));
finalListbitmapsList=newArrayList<>();
for(inti=0;iviewsList=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获取数据库中的图片文件方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。