android 读取mysql中的图片_Android 通过API获取数据库中的图片文件方式

c90cadccf06ff6fb04b20ae3486314e8.png

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> list = new List>();

foreach (var item in showData)

{

list.Add(new Tuple(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 list = pictureData_JsonHelper.getJsonData(httpData);

Log.d("main_pictureData", String.valueOf(list.size()));

final List 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 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获取数据库中的图片文件方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持云海天教程。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值