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 的方法这里就不看了。我相信大家都会。

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获取数据库中的图片文件方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Android中判断当前API的版本号方法

    Android中由于不同版本API会有一些变化,导致一些较早版本可能不支持新的方法,或者某些功能处理过程不太一样,需要判断当前版本然后进行适当的处理. 那么,如何判断当前API的版本号呢? 例如判断api版本号是否大于等于19: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {...} 其中,Build.VERSION_CODES.KITKAT = 19 Build.VERSION.SDK_INT是什么: public stat

  • android 微信 sdk api调用不成功解决方案

    最近一直在调用微信的API,却发现一直调用不成功,纠结了好久,各方面找教程,找官方,官方里的文档也只是写得很模糊,说是按三步走. 1.申请App_ID 2.填写包名3. 获取程序签名的md5值, 这三步只要你走对了就能调通,可是大家都不知道有时候我们打包的keystore和我们打包的keystore获取到的程序签名的md5是不一样的.我们在申请的时候填的程序签名值是正式打包的,但我们在eclipse部署上去的却是用的我们默认的debug.keystore.而这样导致的后果就是程序签名不一样,会一

  • Android 通过API获取数据库中的图片文件方式

    Overview 今天复习了一下Android 如何将我们数据库中图片获取出来,并且将其转换为bitmap进行显示. 开发环境以及技术 使用Visual Studio 2019 Android Studio 3.5 API 使用 ASP .NET WEB API 开发 数据库操作只用Entity Framework 使用本地数据库作为数据源 如果你是一个需要开发软件和API的程序员,那么你可以看一下,如果你不是可以选择跳过 $\color{#6995C2}{API开发}$. API 开发 这里我

  • C#操作数据库中存取图片文件的方法

    本文实例讲述了C#操作数据库中存取图片文件的方法.分享给大家供大家参考.具体如下: private string sqlconnstr = "Data Source=.;Database=db_test;User id=sa;PWD=123456"; /*功能:把一种图片插入到数据库中 *返回值:无 */ void InsertImageToDB() { //将需要存储的图片读取为数据流 FileStream fs = new FileStream(@"D:/Bear.jpg

  • Android实现动态向Gallery中添加图片及倒影与3D效果示例

    本文实例讲述了Android实现动态向Gallery中添加图片及倒影与3D效果的方法.分享给大家供大家参考,具体如下: 在Android中gallery可以提供一个很好的显示图片的方式,实现上面的效果以及动态添加数据库或者网络上下载下来的图片资源.我们首先实现一个自定义的Gallery类. MyGallery.java: package nate.android.Service; import android.content.Context; import android.graphics.Ca

  • Android编程简单获取网络上的图片

    本文实例讲述了Android编程简单获取网络上的图片的方法.分享给大家供大家参考,具体如下: 要获取网络上的图片,首先得有网络的访问权限,这个不再写了,以前的文章中写过,还有布局方式不再写了,就是写也是一个简单的布局,没有多大意义,直接上核心代码: 这是本人使用的一个简单的类,来获取网上的图片. public static Bitmap getImage(String Url) throws Exception { try { URL url = new URL(Url); String res

  • ajax动态获取数据库中的数据方法

    今天看到有人在问答上问怎样去动态取值附在option上,本来想解决的,但我发现....没有,我本来也笨,记不住,所以还是写一下,让大家可以看一下: 首先我这用的框架是SSM,代码就开始了: 这是写在前台的方法里一个点击事件进入方法里我就不写那么麻烦了直接ajax部分代码: $.ajax({//这就开始进入ajax了 type:"get",//这个我也忘了,好像是类似格式吧,基本是死的不需要改动 dataType:"json",//这个是将字符串转换成json格式 c

  • asp.net mvc 从数据库中读取图片的实现代码

    首先是创建一个类,继承于ActionResult,记住要引用System.Web.Mvc命名空间,如下: 复制代码 代码如下: public class ImageResult : ActionResult { public ImageFormat ContentType { get; set; } public Image image { get; set; } public string SourceName { get; set; } public ImageResult(string _

  • php获取数据库中数据的实现方法

    废话不多说,直接上代码 <?php header("Content-type:text/html;charset=utf-8");//字符编码设置 $servername = "localhost"; $username = "root"; $password = "root"; $dbname = "web"; // 创建连接 $con =mysqli_connect($servername, $u

  • 如何基于java向mysql数据库中存取图片

    这篇文章主要介绍了如何基于java向mysql数据库中存取图片,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 学mysql的时候都是做个表格,放的也都是文字内容,虽然我知道长篇的文章和图片或者视频的都是用过文件夹的方式存储的,再讲文件路径存进数据库中.但还是想试试直接往mysql数据库中存取图片.这里我用的是java语言和jdbc实现的 mysql数据库中有一个类型是Blob类型,这是一个二进制类型,通常我们会将图片或音像文件转成二进制再存入数

  • 解决Android自定义view获取attr中自定义颜色的问题

    好久不见,最近有点忙,好久没有发文章了,前天有个小学弟在写项目的过程中遇到了这个问题,由此写一篇文章. 项目场景: Android自定义View在布局中设置颜色 问题描述: 以下为学弟的代码 //attrs文件 <attr name="leftcolor" format="color"/> <attr name="rightcolor" format="color"/> //Java文件代码,获取颜色

  • 通过Java 程序获取Word中指定图片的坐标位置

    之前给大家介绍过Java解析word,获取文档中图片位置的方法,感兴趣的朋友点击查看下,今天给大家介绍如何通过Java 程序获取Word中指定图片的坐标位置,感兴趣的朋友一起看看吧! 程序运行环境: Word测试文档:.docx 2013 Free Spire.doc.jar 3.9.0 IntelliJ IDEA JDK 1.8.0 方法步骤: 1. 指定文件路径,本次测试代码路径为项目文件夹路径.即在IDEA项目文件下存入用于测试的Word文档,如:C:\Users\Administrato

随机推荐