Android 通過API獲取資料庫中的圖片檔案方式
阿新 • • 發佈:2020-03-22
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,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獲取資料庫中的圖片檔案方式就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。