Android 通过API获取数据库中的图片文件方式
时间:2022-07-27
本文章向大家介绍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();
}
}
我们需要在我们的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获取数据库中的图片文件方式就是小编分享给大家的全部内容了,希望能给大家一个参考。
- HDUOJ---1863畅通工程
- HDUOJ---1879 继续畅通工程
- MySQL命令行工具:percona-toolkit安装使用初探
- 解决Nginx配置http2不生效,谷歌浏览器仍然采用http1.1协议问题
- 海量数据切分抽取的实践场景(r11笔记第43天)
- 使用shell自动化诊断性能问题(一)(r11笔记第41天)
- Data Guard实现故障自动切换(二)(r11笔记第40天)
- Oracle Data Guard延迟的原因(r11笔记第69天)
- 一个细小的空间问题触发的报警(r11笔记第68天)
- MySQL误操作数据恢复的简单实践(r11笔记第67天)
- Oracle 12c中JOB运行失败的简单处理(r11笔记第66天)
- MySQL中的半同步复制(r11笔记第65天)
- Linux系统LVM逻辑卷创建过程以及自动化脚本
- 一个闪回区报警的数据恢复(r11笔记第62天)
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释