如何使用webservices和json在imageview上显示图像

时间:2017-03-21 08:02:45

标签: xamarin

我正在使用网络服务在imageview中显示图片。但是Web服务图像显示在SYSTEM.BYTE []格式中。那么如何在xamarin android应用程序中转换或显示imageview中的图像?

Webservice.asmx:

[WebMethod(MessageName = "BindHospName", Description = "Bind Hospital Name Control")]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = true)]
    [System.Xml.Serialization.XmlInclude(typeof(GetHospName))]
    public string BindHosp(decimal SpecID)
    {
        JavaScriptSerializer objJss = new JavaScriptSerializer();
        List<GetHospName> HospName = new List<GetHospName>();
        try
        {
            ConnectionString();
            cmd = new SqlCommand("select b.HID,b.HospName,b.Logo from HospitalRegBasic b inner join HospitalRegClinical c on b.HID=c.HID " +
                                 "where b.EmailActivationCode <> '' and b.EmailActivationStatus = 1 and b.Status = 1 and c.SPEC_ID = @SpecID ", conn);
            cmd.Parameters.AddWithValue("@SpecID", SpecID);
            dr = cmd.ExecuteReader();
            if (dr.HasRows)
            {
                while (dr.Read())
                {
                    var getHosp = new GetHospName
                    {
                        HospID = dr["HID"].ToString(),
                        HospName = dr["HospName"].ToString(),
                        HospLogo = dr["Logo"].ToString()
                    };

                    HospName.Add(getHosp);
                }
            }
            dr.Close();
            cmd.Dispose();
            conn.Close();
        }
        catch (Exception)
        {
            throw;
        }
        return objJss.Serialize(HospName);
    }

Class.cs:

namespace HSAPP
{
    class ContListViewHospNameClass : BaseAdapter<GetHospNames>
    {
        List<GetHospNames> objList;

        Activity objActivity;

        public ContListViewHospNameClass (Activity objMyAct, List<GetHospNames> objMyList) : base()
        {
            this.objActivity = objMyAct;
            this.objList = objMyList;
        }

        public override GetHospNames this[int position]
        {
            get
            {
                return objList[position];
            }
        }

        public override int Count
        {
            get
            {
                return objList.Count;
            }
        }

        public override long GetItemId(int position)
        {
            return position;
        }

        public static Bitmap bytesToBitmap(byte[] imageBytes)
        {

            Bitmap bitmap = BitmapFactory.DecodeByteArray(imageBytes, 0, imageBytes.Length);

            return bitmap;
        }

        public override View GetView(int position, View convertView, ViewGroup parent)
        {
            var item = objList[position];

            if (convertView == null)
            {
                convertView = objActivity.LayoutInflater.Inflate(Resource.Layout.ContListViewHospName, null);
            }
            convertView.FindViewById<TextView>(Resource.Id.tvHospID).Text = item.HospID;
            convertView.FindViewById<TextView>(Resource.Id.tvHospName).Text = item.HospName;

            byte[] img =item.HospLogo;

            Bitmap bitmap = BitmapFactory.DecodeByteArray(img, 0, img.Length);

            convertView.FindViewById<ImageView>(Resource.Id.imgLogo).SetImageBitmap(bitmap);
            return convertView;
        }
    }
}

这是JSON代码:

private void BindControl_BindHospCompleted(object sender, BindControl.BindHospCompletedEventArgs e)
{
    jsonValue = e.Result.ToString();

    if (jsonValue == null)
    {
        Toast.MakeText(this, "No Data For Bind", ToastLength.Long).Show();
        return;
    }

    try
    {
        JArrayValue = JArray.Parse(jsonValue);
        list = new List<GetHospNames>();
        int count = 0;
        while (count < JArrayValue.Count)
        {

            GetHospNames getHospName = new GetHospNames(JArrayValue[count]["HospID"].ToString(), JArrayValue[count]["HospName"].ToString(),JArrayValue[count]["Logo"]);
            list.Add(getHospName);
            count++;
        }
        listView.Adapter = new ContListViewHospNameClass(this, list);
    }
    catch (Exception ex)
    {
        Toast.MakeText(this, ex.ToString(), ToastLength.Long).Show();
    }
}

1 个答案:

答案 0 :(得分:0)

public static void SetImageFromByteArray (byte[] iArray, UIImageView imageView)
{
    if (iArray != null && iArray.Length > 0) {
        Bitmap bitmap = BitmapFactory.DecodeByteArray (iArray, 0, iArray.Length);
        imageView.SetImageBitmap (bitmap);
    }
}

那就是它。如果这不起作用,则您的字节数组可能不是有效图像。

public static bool IsValidImage(byte[] bytes)
{
    try {
        using(MemoryStream ms = new MemoryStream(bytes))
           Image.FromStream(ms);
    }
    catch (ArgumentException) {
       return false;
    }
    return true; 
}