温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么在Android中利用API获取数据库中的图片文件

发布时间:2021-01-16 10:28:45 来源:亿速云 阅读:344 作者:Leah 栏目:移动开发

这期内容当中小编将会给大家带来有关怎么在Android中利用API获取数据库中的图片文件,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

开发环境以及技术

使用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, 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获取数据库中的图片文件了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI