我自横刀向天笑,去留肝胆两昆仑。这篇文章主要讲述Android 通过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();
}
}
【Android 通过API获取数据库中的图片文件】我们需要在我们的WebApiCinfig的类中添加一句代码这样我们就将所有的端口返回数据变成了JSON格式的数据了。
然后我们看一下如何返回我们的图片数据:
// GET: api/Pictures
public object GetPictures()
{
var showData = https://www.songbingjia.com/android/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 = https://www.songbingjia.com/android/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 的方法这里就不看了。我相信大家都会。
如何将我们的String类型转换为我们的Bitmap。看一下源代码:
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);
}
这样我们的全部过程就已经完成了。
推荐阅读
- 《AndroidStudio导入安卓源码-idegen》---可方便查看安卓源代码
- Win10系统的设置打开不了怎样办?
- Win10系统windows hello提示正在寻找怎样办?
- Win10系统Bitlocker解密后无法访问磁盘 参数出错怎样办?
- Win10系统微软账户忘记登录密码怎样办?
- Win10系统账户被停用怎样办?
- Win10系统炉石传说无法下载更新/卡死该怎样办?
- Win10系统UC浏览器flash player 因过时而遭到停止如何处理?
- Win10系统QQ传输文件卡住怎样处理?