zoukankan      html  css  js  c++  java
  • 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 的方法这里就不看了。我相信大家都会。
    如何将我们的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);
    }
    

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

  • 相关阅读:
    Python日志采集(详细)
    Python+Appium自动化测试(15)-使用Android模拟器(详细)
    Python+Appium自动化测试(14)-yaml配置Desired capabilities
    Python基础笔记2-ruamel.yaml读写yaml文件
    LoaRunner性能测试系统学习教程:SQL Server等待类型
    LoaRunner性能测试系统学习教程:CPU瓶颈
    LoaRunner性能测试系统学习教程:SQL监控与调优
    LoaRunner性能测试系统学习教程:垃圾回收器(12)
    LoaRunner性能测试系统学习教程:垃圾收集算法(11)
    LoadRunner性能测试系统学习教程:GC回收机制(10)
  • 原文地址:https://www.cnblogs.com/cao-1/p/12239901.html
Copyright © 2011-2022 走看看