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- @[email protected]初始换主页面底部的图片
 **/
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 的方法这里就不看了。我相信大家都会。
如何将我们的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);
}

这样我们的全部过程就已经完成了。

原文地址:https://www.cnblogs.com/cao-1/p/12239901.html

时间: 2024-10-15 08:13:58

Android 通过API获取数据库中的图片文件的相关文章

Android 使用ContentProvider扫描手机中的图片,仿微信显示本地图片效果

首先我们先看第一个界面吧,使用将手机中的图片扫描出来,然后根据图片的所在的文件夹将其分类出来,并显示所在文件夹里面的一张图片和文件夹中图片个数,我们根据界面元素(文件夹名, 文件夹图片个数,文件夹中的一张图片)使用一个实体对象ImageBean来封装这三个属性 package com.example.imagescan; /** * GridView的每个item的数据对象 * * @author len * */ public class ImageBean{ /** * 文件夹的第一张图片路

在数据库中 存储图片 以及 在界面中显示图片(存储图片路径)- 这种方法相对与存储二进制文件好

花了一下午时间,终于学会了在数据库中存储图片,以及在界面中显示图片了. 存储图片有两种方法: 一种是:直接把图片转换成二进制文件存储在数据库中. 一种是:存储图片的路径到数据库,用的时候直接调用路径给image等图像控件即可. 两种方法,有利有弊,第一种方法适合存储量少且重要的图片信息.第二种方法适合存储量大但不是太重要的图片. 我使用的是第二种方法,简单,实用. 下面就是我具体的实现过程: 首先我新建了两个网页文件,insert_photo.aspx / select_photo.apsx 第

zend framework获取数据库中枚举类enum的数据并将其转换成数组

在model中建立这样的模型,在其中写入获取枚举类的方法 class Student extends Zend_Db_Table{ protected $_name ='student'; protected $_primary ='id'; function getPartyEnum($enumname){ //适配器并获取数据 $db = $this->getAdapter(); $db->query("SET NAMES GBK"); $sql = $db->q

[转]asp.net mvc 从数据库中读取图片

本文转自:http://www.cnblogs.com/mayt/archive/2010/05/20/1740358.html 首先是创建一个类,继承于ActionResult,记住要引用System.Web.Mvc命名空间,如下: public class ImageResult : ActionResult { public ImageFormat ContentType { get; set; } public Image image { get; set; } public strin

通过jdbc获取数据库中的表结构

通过jdbc获取数据库中的表结构 主键 各个表字段类型及应用生成实体类 1.JDBC中通过MetaData来获取具体的表的相关信息.可以查询数据库中的有哪些表,表有哪些字段,字段的属性等等.MetaData中通过一系列getXXX函数,将这些信息存放到ResultSet里面,然后返回给用户.关于MetaData的说明网上也有不少,这里我只是从我自身学习的角度来记录一下简单使用JDBC以及获取数据表相关信息的方法. DatabaseMetaData dbmd = con.getMetaData()

使用 UEditor 编辑器获取数据库中的数据

在 ThinkPHP 3.2.2 中,使用 UEditor 编辑器获取数据库中保存的数据,可以使用 UEditor 自身提供的方法. 首先在视图模板中实例化编辑器,这是出现编辑器界面的必须的行为: <script type="text/javascript"> var editor = UE.getEditor('container'); </script> 然后使用 setContent 方法来使数据显示在编辑框内: editor.setContent(dat

使用Gridview绑定数据库中的图片

使用Gridview绑定数据库中的图片 注:此系列记录在我实际开发中遇到的问题和收藏一些技巧文章. 我们都知道,在Gridview中不能直接去绑定数据库中的图片,我们可以利用HttpHandler很容易的完成这个任务,在这里我记录一下这个过程. 1.上传图片存储到数据库中 在数据库中创建一个表,添加一下3个字段: 步骤一:在Web页面中拖一个FileUpload 控件,一个文本框用于输入名称和提交上传按钮 <asp:FileUpload ID="fuImage" runat=&q

集合差集 哈希表 比较数据库中的图片和服务器上的图片,将服务器上的垃圾图片删除

SSH 框架下code: public String deleRubbishAd(){ int deleADcount = 0; rubbishADtp = configDao.rubbishADtp(); //数据库中的广告图片集合 Map<Object,Object> shujuku= new HashMap<Object,Object>(); File adfile = new File("C://Program Files//Apache Software Fou

dedecms获取文章中的图片代码

1.在 /include/common.func.php 文件底部加入以下代码 /** * getArcImages 获取文章中的图片 * $id 文章ID * $num 要获取的图片数量 默认为4张 */ function getArcImages($id,$num=4){ global $dsql; $row = $dsql->GetOne("SELECT * FROM dede_addonarticle WHERE aid= $id"); $content = $row['