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);
}

這樣我們的全部過程就已經完成了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM